Subversion Repositories Kolibri OS

Rev

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

Rev 8088 Rev 8161
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 sense of coordinates
74
  * The sizes of the window are understood in sense 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 = identifier of process/thread (PID/TID)
1021
  * ecx = identifier 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 occurred
1134
    or -1 if error has occurred
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 = identifier of process/thread (PID/TID)
1159
  * ecx = identifier 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
Parameters:
1506
Parameters:
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
    but if pointer in edx is illegal, for example,
-
 
1556
    [edx, edx + 128) region intersects with kernel memory,
-
 
1557
    then function returns -1
1555
Or:
1558
Or:
1556
  * eax = 26 - function number
1559
  * eax = 26 - function number
1557
  * ebx = 2 - subfunction number
1560
  * ebx = 2 - subfunction number
1558
  * ecx = 9
1561
  * ecx = 9
1559
Returned value:
1562
Returned value:
1560
  * eax = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1563
  * eax = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1561
Remarks:
1564
Remarks:
1562
  * If Alt is pressed, the layout with Alt is used;
1565
  * If Alt is pressed, the layout with Alt is used;
1563
    if Alt is not pressed, but Shift is pressed,
1566
    if Alt is not pressed, but Shift is pressed,
1564
    the layout with Shift is used;
1567
    the layout with Shift is used;
1565
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1568
    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;
1569
    layout is used and then from the code is subtracted 0x60;
1567
    if no control key is pressed, the normal layout is used.
1570
    if no control key is pressed, the normal layout is used.
1568
  * To set layout and country identifier use
1571
  * To set layout and country identifier use
1569
    subfunction 2 of function 21.
1572
    subfunction 2 of function 21.
1570
  * Country identifier is global system variable, which is not used
1573
  * Country identifier is global system variable, which is not used
1571
    by the kernel itself; however the application '@taskbar' displays
1574
    by the kernel itself; however the application '@taskbar' displays
1572
    the corresponding icon (using this function).
1575
    the corresponding icon (using this function).
1573
  * The application @taskbar switches layouts on user request.
1576
  * The application @taskbar switches layouts on user request.
1574
 
1577
 
1575
---------------------- Constants for registers: ----------------------
1578
---------------------- Constants for registers: ----------------------
1576
  eax - SF_SYSTEM_GET (26)
1579
  eax - SF_SYSTEM_GET (26)
1577
  ebx - SSF_KEYBOARD_LAYOUT (2)
1580
  ebx - SSF_KEYBOARD_LAYOUT (2)
1578
======================================================================
1581
======================================================================
1579
========== Function 26, subfunction 5 - get system language. =========
1582
========== Function 26, subfunction 5 - get system language. =========
1580
======================================================================
1583
======================================================================
1581
Parameters:
1584
Parameters:
1582
  * eax = 26 - function number
1585
  * eax = 26 - function number
1583
  * ebx = 5 - subfunction number
1586
  * ebx = 5 - subfunction number
1584
Returned value:
1587
Returned value:
1585
  * eax = system language (1=eng, 2=fi, 3=ger, 4=rus)
1588
  * eax = system language (1=eng, 2=fi, 3=ger, 4=rus)
1586
Remarks:
1589
Remarks:
1587
  * System language is global system variable and is not used
1590
  * System language is global system variable and is not used
1588
    by the kernel itself, however application @taskbar draws the
1591
    by the kernel itself, however application @taskbar draws the
1589
    appropriate icon (using this function).
1592
    appropriate icon (using this function).
1590
  * To set system language use subfunction 5 of function 21.
1593
  * To set system language use subfunction 5 of function 21.
1591
 
1594
 
1592
---------------------- Constants for registers: ----------------------
1595
---------------------- Constants for registers: ----------------------
1593
  eax - SF_SYSTEM_GET (26)
1596
  eax - SF_SYSTEM_GET (26)
1594
  ebx - SSF_SYS_LANG (5)
1597
  ebx - SSF_SYS_LANG (5)
1595
======================================================================
1598
======================================================================
1596
=== Function 26, subfunction 9 - get the value of the time counter. ==
1599
=== Function 26, subfunction 9 - get the value of the time counter. ==
1597
======================================================================
1600
======================================================================
1598
Parameters:
1601
Parameters:
1599
  * eax = 26 - function number
1602
  * eax = 26 - function number
1600
  * ebx = 9 - subfunction number
1603
  * ebx = 9 - subfunction number
1601
Returned value:
1604
Returned value:
1602
  * eax = number of 1/100s of second, past from the system boot time
1605
  * eax = number of 1/100s of second, past from the system boot time
1603
Remarks:
1606
Remarks:
1604
  * Counter takes modulo 2^32, that correspond to a little more
1607
  * Counter takes modulo 2^32, that correspond to a little more
1605
    than 497 days.
1608
    than 497 days.
1606
  * To get system time use function 3.
1609
  * To get system time use function 3.
1607
 
1610
 
1608
---------------------- Constants for registers: ----------------------
1611
---------------------- Constants for registers: ----------------------
1609
  eax - SF_SYSTEM_GET (26)
1612
  eax - SF_SYSTEM_GET (26)
1610
  ebx - SSF_TIME_COUNT (9)
1613
  ebx - SSF_TIME_COUNT (9)
1611
======================================================================
1614
======================================================================
1612
===================== Function 26, subfunction 10 ====================
1615
===================== Function 26, subfunction 10 ====================
1613
========== Get the value of the high precision time counter. =========
1616
========== Get the value of the high precision time counter. =========
1614
======================================================================
1617
======================================================================
1615
Parameters:
1618
Parameters:
1616
  * eax = 26 - function number
1619
  * eax = 26 - function number
1617
  * ebx = 10 - subfunction number
1620
  * ebx = 10 - subfunction number
1618
Returned value:
1621
Returned value:
1619
  * eax = number of nanoseconds since system boot time (lower DWORD)
1622
  * eax = number of nanoseconds since system boot time (lower DWORD)
1620
  * edx = number of nanoseconds since system boot time (high DWORD)
1623
  * edx = number of nanoseconds since system boot time (high DWORD)
1621
Remarks:
1624
Remarks:
1622
  * The counter is based on HPET, if HPET is not available, resolution
1625
  * The counter is based on HPET, if HPET is not available, resolution
1623
    will be reduced to 10 000 000 nanoseconds.
1626
    will be reduced to 10 000 000 nanoseconds.
1624
 
1627
 
1625
---------------------- Constants for registers: ----------------------
1628
---------------------- Constants for registers: ----------------------
1626
  eax - SF_SYSTEM_GET (26)
1629
  eax - SF_SYSTEM_GET (26)
1627
  ebx - SSF_TIME_COUNT_PRO (10)
1630
  ebx - SSF_TIME_COUNT_PRO (10)
1628
======================================================================
1631
======================================================================
1629
===================== Function 26, subfunction 11 ====================
1632
===================== Function 26, subfunction 11 ====================
1630
========== Find out whether low-level HD access is enabled. ==========
1633
========== Find out whether low-level HD access is enabled. ==========
1631
======================================================================
1634
======================================================================
1632
Parameters:
1635
Parameters:
1633
  * eax = 26 - function number
1636
  * eax = 26 - function number
1634
  * ebx = 11 - subfunction number
1637
  * ebx = 11 - subfunction number
1635
Returned value:
1638
Returned value:
1636
  * eax = 0/1 - disabled/enabled
1639
  * eax = 0/1 - disabled/enabled
1637
Remarks:
1640
Remarks:
1638
  * Is used in LBA read (subfunction 8 of function 58).
1641
  * Is used in LBA read (subfunction 8 of function 58).
1639
  * To set current state use subfunction 11 of function 21.
1642
  * To set current state use subfunction 11 of function 21.
1640
 
1643
 
1641
---------------------- Constants for registers: ----------------------
1644
---------------------- Constants for registers: ----------------------
1642
  eax - SF_SYSTEM_GET (26)
1645
  eax - SF_SYSTEM_GET (26)
1643
  ebx - SSF_ACCESS_HD_LBA (11)
1646
  ebx - SSF_ACCESS_HD_LBA (11)
1644
======================================================================
1647
======================================================================
1645
===================== Function 26, subfunction 12 ====================
1648
===================== Function 26, subfunction 12 ====================
1646
========== Find out whether low-level PCI access is enabled. =========
1649
========== Find out whether low-level PCI access is enabled. =========
1647
======================================================================
1650
======================================================================
1648
Parameters:
1651
Parameters:
1649
  * eax = 26 - function number
1652
  * eax = 26 - function number
1650
  * ebx = 12 - subfunction number
1653
  * ebx = 12 - subfunction number
1651
Returned value:
1654
Returned value:
1652
  * eax = 0/1 - disabled/enabled
1655
  * eax = 0/1 - disabled/enabled
1653
Remarks:
1656
Remarks:
1654
  * Is used by operations with PCI bus (function 62).
1657
  * Is used by operations with PCI bus (function 62).
1655
  * The current implementation uses only low bit of ecx.
1658
  * The current implementation uses only low bit of ecx.
1656
  * To set the current state use subfunction 12 of function 21.
1659
  * To set the current state use subfunction 12 of function 21.
1657
 
1660
 
1658
---------------------- Constants for registers: ----------------------
1661
---------------------- Constants for registers: ----------------------
1659
  eax - SF_SYSTEM_GET (26)
1662
  eax - SF_SYSTEM_GET (26)
1660
  ebx - SSF_ACCESS_PCI (12)
1663
  ebx - SSF_ACCESS_PCI (12)
1661
======================================================================
1664
======================================================================
1662
=================== Function 29 - get system date. ===================
1665
=================== Function 29 - get system date. ===================
1663
======================================================================
1666
======================================================================
1664
Parameters:
1667
Parameters:
1665
  * eax = 29 - function number
1668
  * eax = 29 - function number
1666
Returned value:
1669
Returned value:
1667
  * eax = 0x00DDMMYY, where
1670
  * eax = 0x00DDMMYY, where
1668
    (binary-decimal coding, BCD, is used)
1671
    (binary-decimal coding, BCD, is used)
1669
  * YY = two low digits of year (00..99)
1672
  * YY = two low digits of year (00..99)
1670
  * MM = month (01..12)
1673
  * MM = month (01..12)
1671
  * DD = day (01..31)
1674
  * DD = day (01..31)
1672
Remarks:
1675
Remarks:
1673
  * To set system date use function 22.
1676
  * To set system date use function 22.
1674
 
1677
 
1675
---------------------- Constants for registers: ----------------------
1678
---------------------- Constants for registers: ----------------------
1676
  eax - SF_GET_SYS_DATE (29)
1679
  eax - SF_GET_SYS_DATE (29)
1677
======================================================================
1680
======================================================================
1678
============= Function 30 - work with the current folder. ============
1681
============= Function 30 - work with the current folder. ============
1679
======================================================================
1682
======================================================================
1680
--------- Subfunction 1 - set current folder for the thread. ---------
1683
--------- Subfunction 1 - set current folder for the thread. ---------
1681
Parameters:
1684
Parameters:
1682
  * eax = 30 - function number
1685
  * eax = 30 - function number
1683
  * ebx = 1 - subfunction number
1686
  * ebx = 1 - subfunction number
1684
  * ecx = pointer to string with the path to new current folder,
1687
  * ecx = pointer to string with the path to new current folder,
1685
    rules of path forming can be found in function 70 description.
1688
    rules of path forming can be found in function 70 description.
1686
Returned value:
1689
Returned value:
1687
  * function does not return value
1690
  * function does not return value
1688
----------------------------------------------------------------------
1691
----------------------------------------------------------------------
1689
--------- Subfunction 2 - get current folder for the thread. ---------
1692
--------- Subfunction 2 - get current folder for the thread. ---------
1690
Parameters:
1693
Parameters:
1691
  * eax = 30 - function number
1694
  * eax = 30 - function number
1692
  * ebx = 2 - subfunction number
1695
  * ebx = 2 - subfunction number
1693
  * ecx = pointer to buffer
1696
  * ecx = pointer to buffer
1694
  * edx = size of buffer
1697
  * edx = size of buffer
1695
Returned value:
1698
Returned value:
1696
  * eax = size of the string (including terminating 0)
1699
  * eax = size of the string (including terminating 0)
1697
Remarks:
1700
Remarks:
1698
  * If the buffer is too small to hold all path, only part of the string
1701
  * If the buffer is too small to hold all path, only part of the string
1699
    will be copied and terminated with 0.
1702
    will be copied and terminated with 0.
1700
  * By default, current folder for the thread is "/sys".
1703
  * By default, current folder for the thread is "/sys".
1701
  * At process/thread creation the current folder will be inherited
1704
  * At process/thread creation the current folder will be inherited
1702
    from the parent.
1705
    from the parent.
1703
----------------------------------------------------------------------
1706
----------------------------------------------------------------------
1704
--- Subfunction 3 - install the add.system directory for the kernel --
1707
--- Subfunction 3 - install the add.system directory for the kernel --
1705
Parameters:
1708
Parameters:
1706
  * eax = 30 - function number
1709
  * eax = 30 - function number
1707
  * ebx = 3 - subfunction number
1710
  * ebx = 3 - subfunction number
1708
  * ecx = pointer to a block of data:
1711
  * ecx = pointer to a block of data:
1709
key     rb  64
1712
key     rb  64
1710
path    rb  64
1713
path    rb  64
1711
    Example:
1714
    Example:
1712
align 64
1715
align 64
1713
key     db  'kolibrios',0   ; key must be in lower case
1716
key     db  'kolibrios',0   ; key must be in lower case
1714
align 64
1717
align 64
1715
path    db  'HD0/1',0
1718
path    db  'HD0/1',0
1716
 
1719
 
1717
Returned value:
1720
Returned value:
1718
  * function does not return value
1721
  * function does not return value
1719
Remarks:
1722
Remarks:
1720
  * The function can be called only 1 time for 1 session of the OS.
1723
  * 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.
1724
  * On input the symbolic key is not changing by encoding.
1722
----------------------------------------------------------------------
1725
----------------------------------------------------------------------
1723
---- Subfunction 4 - set current folder, specifying the encoding. ----
1726
---- Subfunction 4 - set current folder, specifying the encoding. ----
1724
Parameters:
1727
Parameters:
1725
  * eax = 30 - function number
1728
  * eax = 30 - function number
1726
  * ebx = 4 - subfunction number
1729
  * ebx = 4 - subfunction number
1727
  * ecx = pointer to string with the path to new current folder
1730
  * ecx = pointer to string with the path to new current folder
1728
  * edx = string encoding, details can be found in function 80 description.
1731
  * edx = string encoding, details can be found in function 80 description.
1729
Returned value:
1732
Returned value:
1730
  * function does not return value
1733
  * function does not return value
1731
----------------------------------------------------------------------
1734
----------------------------------------------------------------------
1732
---- Subfunction 5 - get current folder, specifying the encoding. ----
1735
---- Subfunction 5 - get current folder, specifying the encoding. ----
1733
Parameters:
1736
Parameters:
1734
  * eax = 30 - function number
1737
  * eax = 30 - function number
1735
  * ebx = 5 - subfunction number
1738
  * ebx = 5 - subfunction number
1736
  * ecx = pointer to buffer
1739
  * ecx = pointer to buffer
1737
  * edx = size of buffer
1740
  * edx = size of buffer
1738
  * esi = string encoding
1741
  * esi = string encoding
1739
Returned value:
1742
Returned value:
1740
  * eax = size of the string in bytes (including terminating 0)
1743
  * eax = size of the string in bytes (including terminating 0)
1741
Remarks:
1744
Remarks:
1742
  * If the buffer is too small to hold all path, only part of the string
1745
  * If the buffer is too small to hold all path, only part of the string
1743
    will be copied and terminated with 0.
1746
    will be copied and terminated with 0.
1744
  * By default, current folder for the thread is "/sys".
1747
  * By default, current folder for the thread is "/sys".
1745
  * At process/thread creation the current folder will be inherited
1748
  * At process/thread creation the current folder will be inherited
1746
    from the parent.
1749
    from the parent.
1747
 
1750
 
1748
---------------------- Constants for registers: ----------------------
1751
---------------------- Constants for registers: ----------------------
1749
  eax - SF_CURRENT_FOLDER (30)
1752
  eax - SF_CURRENT_FOLDER (30)
1750
  ebx - SSF_SET_CF (1), SSF_GET_CF (2), SSF_ADD_SYS_FOLDER (3)
1753
  ebx - SSF_SET_CF (1), SSF_GET_CF (2), SSF_ADD_SYS_FOLDER (3)
1751
======================================================================
1754
======================================================================
1752
========= Function 34 - who owner the pixel on the screen. ===========
1755
========= Function 34 - who owner the pixel on the screen. ===========
1753
======================================================================
1756
======================================================================
1754
Parameters:
1757
Parameters:
1755
  * eax = 34 - function number
1758
  * eax = 34 - function number
1756
  * ebx = x-coordinate (relative to the display)
1759
  * ebx = x-coordinate (relative to the display)
1757
  * ecx = y-coordinate (relative to the display)
1760
  * ecx = y-coordinate (relative to the display)
1758
 
1761
 
1759
Returned value:
1762
Returned value:
1760
  * eax = 0x000000XX - owner of pixel the slot window N
1763
  * eax = 0x000000XX - owner of pixel the slot window N
1761
    If incorrect values ebx and ecx then function returns 0
1764
    If incorrect values ebx and ecx then function returns 0
1762
  * The function takes the value from the area [_WinMapAddress]
1765
  * The function takes the value from the area [_WinMapAddress]
1763
 
1766
 
1764
---------------------- Constants for registers: ----------------------
1767
---------------------- Constants for registers: ----------------------
1765
  eax - SF_GET_PIXEL_OWNER (34)
1768
  eax - SF_GET_PIXEL_OWNER (34)
1766
======================================================================
1769
======================================================================
1767
======= Function 35 - read the color of a pixel on the screen. =======
1770
======= Function 35 - read the color of a pixel on the screen. =======
1768
======================================================================
1771
======================================================================
1769
Parameters:
1772
Parameters:
1770
  * eax = 35
1773
  * eax = 35
1771
  * ebx = y*xsize+x, where
1774
  * ebx = y*xsize+x, where
1772
  * (x,y) = coordinates of a pixel (beginning from 0)
1775
  * (x,y) = coordinates of a pixel (beginning from 0)
1773
  * xsize = horizontal screen size
1776
  * xsize = horizontal screen size
1774
Returned value:
1777
Returned value:
1775
  * eax = color 0x00RRGGBB
1778
  * eax = color 0x00RRGGBB
1776
Remarks:
1779
Remarks:
1777
  * To get screen sizes use function 14. Pay attention,
1780
  * To get screen sizes use function 14. Pay attention,
1778
    that it subtracts 1 from both sizes.
1781
    that it subtracts 1 from both sizes.
1779
  * There is also direct access (without any system calls)
1782
  * There is also direct access (without any system calls)
1780
    to videomemory through the selector gs. To get parameters of
1783
    to videomemory through the selector gs. To get parameters of
1781
    the current videomode, use function 61.
1784
    the current videomode, use function 61.
1782
 
1785
 
1783
---------------------- Constants for registers: ----------------------
1786
---------------------- Constants for registers: ----------------------
1784
  eax - SF_GET_PIXEL (35)
1787
  eax - SF_GET_PIXEL (35)
1785
======================================================================
1788
======================================================================
1786
=================== Function 36 - read screen area. ==================
1789
=================== Function 36 - read screen area. ==================
1787
======================================================================
1790
======================================================================
1788
Paramters:
1791
Paramters:
1789
  * eax = 36 - function number
1792
  * eax = 36 - function number
1790
  * ebx = pointer to the previously allocated memory area,
1793
  * ebx = pointer to the previously allocated memory area,
1791
        where will be placed the image in the format BBGGRRBBGGRR...
1794
        where will be placed the image in the format BBGGRRBBGGRR...
1792
  * ecx = [size on axis x]*65536 + [size on axis y]
1795
  * ecx = [size on axis x]*65536 + [size on axis y]
1793
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1796
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1794
Returned value:
1797
Returned value:
1795
  * function does not return value
1798
  * function does not return value
1796
Remarks:
1799
Remarks:
1797
  * Coordinates of the image are coordinates of the upper left corner
1800
  * Coordinates of the image are coordinates of the upper left corner
1798
    of the image relative to the screen.
1801
    of the image relative to the screen.
1799
  * Size of the image in bytes is 3*xsize*ysize.
1802
  * Size of the image in bytes is 3*xsize*ysize.
1800
 
1803
 
1801
---------------------- Constants for registers: ----------------------
1804
---------------------- Constants for registers: ----------------------
1802
  eax - SF_GET_IMAGE (36)
1805
  eax - SF_GET_IMAGE (36)
1803
======================================================================
1806
======================================================================
1804
=================== Function 37 - work with mouse. ===================
1807
=================== Function 37 - work with mouse. ===================
1805
======================================================================
1808
======================================================================
1806
 
1809
 
1807
---------- Subfunction 0 - screen coordinates of the mouse -----------
1810
---------- Subfunction 0 - screen coordinates of the mouse -----------
1808
Parameters:
1811
Parameters:
1809
  * eax = 37 - function number
1812
  * eax = 37 - function number
1810
  * ebx = 0 - subfunction number
1813
  * ebx = 0 - subfunction number
1811
Returned value:
1814
Returned value:
1812
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1815
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1813
    (beginning from 0)
1816
    (beginning from 0)
1814
 
1817
 
1815
-- Subfunction 1 - coordinates of the mouse relative to the window ---
1818
-- Subfunction 1 - coordinates of the mouse relative to the window ---
1816
Parameters:
1819
Parameters:
1817
  * eax = 37 - function number
1820
  * eax = 37 - function number
1818
  * ebx = 1 - subfunction number
1821
  * ebx = 1 - subfunction number
1819
Returned value:
1822
Returned value:
1820
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1823
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1821
    relative to the application window (beginning from 0)
1824
    relative to the application window (beginning from 0)
1822
Remarks:
1825
Remarks:
1823
  * The value is calculated by formula (x-xwnd)*65536 + (y-ywnd).
1826
  * The value is calculated by formula (x-xwnd)*65536 + (y-ywnd).
1824
    If y>=ywnd, the low word is non-negative and contains
1827
    If y>=ywnd, the low word is non-negative and contains
1825
    relative y-coordinate, and the high word - relative x-coordinate
1828
    relative y-coordinate, and the high word - relative x-coordinate
1826
    (with correct sign). Otherwise the low word is negative and still
1829
    (with correct sign). Otherwise the low word is negative and still
1827
    contains relative y-coordinate, and to the high word
1830
    contains relative y-coordinate, and to the high word
1828
    1 should be added.
1831
    1 should be added.
1829
 
1832
 
1830
------------- Subfunction 2 - states of the mouse buttons ------------
1833
------------- Subfunction 2 - states of the mouse buttons ------------
1831
Parameters:
1834
Parameters:
1832
  * eax = 37 - function number
1835
  * eax = 37 - function number
1833
  * ebx = 2 - subfunction number
1836
  * ebx = 2 - subfunction number
1834
Returned value:
1837
Returned value:
1835
  * eax = bits 0-4 equal to subfunction 3
1838
  * eax = bits 0-4 equal to subfunction 3
1836
 
1839
 
1837
------- Subfunction 3 - states and events of the mouse buttons -------
1840
------- Subfunction 3 - states and events of the mouse buttons -------
1838
Parameters:
1841
Parameters:
1839
  * eax = 37 - function number
1842
  * eax = 37 - function number
1840
  * ebx = 3 - subfunction number
1843
  * ebx = 3 - subfunction number
1841
Returned value:
1844
Returned value:
1842
  * eax contains next information:
1845
  * eax contains next information:
1843
 
1846
 
1844
states:
1847
states:
1845
  * bit 0 is set = left button is held
1848
  * bit 0 is set = left button is held
1846
  * bit 1 is set = right button is held
1849
  * bit 1 is set = right button is held
1847
  * bit 2 is set = middle button is held
1850
  * bit 2 is set = middle button is held
1848
  * bit 3 is set = 4th button is held
1851
  * bit 3 is set = 4th button is held
1849
  * bit 4 is set = 5th button is held
1852
  * bit 4 is set = 5th button is held
1850
 
1853
 
1851
events:
1854
events:
1852
  * bit 8 is set = left button is pressed
1855
  * bit 8 is set = left button is pressed
1853
  * bit 9 is set = right button is pressed
1856
  * bit 9 is set = right button is pressed
1854
  * bit 10 is set = middle button is pressed
1857
  * bit 10 is set = middle button is pressed
1855
 
1858
 
1856
  * bit 15 is set = vertical scroll is used
1859
  * bit 15 is set = vertical scroll is used
1857
 
1860
 
1858
  * bit 16 is set = left button is released
1861
  * bit 16 is set = left button is released
1859
  * bit 17 is set = right button is released
1862
  * bit 17 is set = right button is released
1860
  * bit 18 is set = middle button is released
1863
  * bit 18 is set = middle button is released
1861
 
1864
 
1862
  * bit 23 is set = horizontal scroll is used
1865
  * bit 23 is set = horizontal scroll is used
1863
 
1866
 
1864
  * bit 24 is set = doubleclick by left button
1867
  * bit 24 is set = doubleclick by left button
1865
 
1868
 
1866
-------------------- Subfunction 4 - load cursor ---------------------
1869
-------------------- Subfunction 4 - load cursor ---------------------
1867
Parameters:
1870
Parameters:
1868
  * eax = 37 - function number
1871
  * eax = 37 - function number
1869
  * ebx = 4 - subfunction number
1872
  * ebx = 4 - subfunction number
1870
  * dx = data source:
1873
  * dx = data source:
1871
  * dx = LOAD_FROM_FILE = 0 - data in a file
1874
  * dx = LOAD_FROM_FILE = 0 - data in a file
1872
    * ecx = pointer to full path to the cursor file
1875
    * ecx = pointer to full path to the cursor file
1873
    * the file must be in the format .cur, which is standard for
1876
    * the file must be in the format .cur, which is standard for
1874
      MS Windows, at that of the size 32*32 pixels
1877
      MS Windows, at that of the size 32*32 pixels
1875
  * dx = LOAD_FROM_MEM = 1 - data of file are already loaded in memory
1878
  * dx = LOAD_FROM_MEM = 1 - data of file are already loaded in memory
1876
    * ecx = pointer to data of the cursor file
1879
    * ecx = pointer to data of the cursor file
1877
    * the data format is the same as in the previous case
1880
    * the data format is the same as in the previous case
1878
  * dx = LOAD_INDIRECT = 2 - data in memory
1881
  * dx = LOAD_INDIRECT = 2 - data in memory
1879
    * ecx = pointer to cursor image in the format ARGB 32*32 pixels
1882
    * ecx = pointer to cursor image in the format ARGB 32*32 pixels
1880
    * edx = 0xXXYY0002, where
1883
    * edx = 0xXXYY0002, where
1881
      * XX = x-coordinate of cursor hotspot
1884
      * XX = x-coordinate of cursor hotspot
1882
      * YY = y-coordinate
1885
      * YY = y-coordinate
1883
      * 0 <= XX, YY <= 31
1886
      * 0 <= XX, YY <= 31
1884
Returned value:
1887
Returned value:
1885
  * eax = 0 - failed
1888
  * eax = 0 - failed
1886
  * otherwise eax = cursor handle
1889
  * otherwise eax = cursor handle
1887
 
1890
 
1888
--------------------- Subfunction 5 - set cursor ---------------------
1891
--------------------- Subfunction 5 - set cursor ---------------------
1889
Sets new cursor for the window of the current thread.
1892
Sets new cursor for the window of the current thread.
1890
Parameters:
1893
Parameters:
1891
  * eax = 37 - function number
1894
  * eax = 37 - function number
1892
  * ebx = 5 - subfunction number
1895
  * ebx = 5 - subfunction number
1893
  * ecx = cursor handle
1896
  * ecx = cursor handle
1894
Returned value:
1897
Returned value:
1895
  * eax = handle of previous cursor
1898
  * eax = handle of previous cursor
1896
Remarks:
1899
Remarks:
1897
  * If the handle is incorrect, the function restores the default
1900
  * If the handle is incorrect, the function restores the default
1898
    cursor (standard arrow). In particular, ecx=0 restores it.
1901
    cursor (standard arrow). In particular, ecx=0 restores it.
1899
 
1902
 
1900
------------------- Subfunction 6 - delete cursor --------------------
1903
------------------- Subfunction 6 - delete cursor --------------------
1901
Parameters:
1904
Parameters:
1902
  * eax = 37 - function number
1905
  * eax = 37 - function number
1903
  * ebx = 6 - subfunction number
1906
  * ebx = 6 - subfunction number
1904
  * ecx = cursor handle
1907
  * ecx = cursor handle
1905
Returned value:
1908
Returned value:
1906
  * eax destroyed
1909
  * eax destroyed
1907
Remarks:
1910
Remarks:
1908
  * The cursor must be loaded previously by the current thread
1911
  * The cursor must be loaded previously by the current thread
1909
    (with the call to subfunction 4). The function does not delete
1912
    (with the call to subfunction 4). The function does not delete
1910
    system cursors and cursors, loaded by another applications.
1913
    system cursors and cursors, loaded by another applications.
1911
  * If the active cursor (set by subfunction 5) is deleted,
1914
  * If the active cursor (set by subfunction 5) is deleted,
1912
    the system restores the default cursor (standard arrow).
1915
    the system restores the default cursor (standard arrow).
1913
 
1916
 
1914
------------------ Subfunction 7 - get scroll data -------------------
1917
------------------ Subfunction 7 - get scroll data -------------------
1915
Parameters:
1918
Parameters:
1916
  * eax = 37 - function number
1919
  * eax = 37 - function number
1917
  * ebx = 7 - subfunction number
1920
  * ebx = 7 - subfunction number
1918
Returned value:
1921
Returned value:
1919
  * eax = [horizontal offset]*65536 + [vertical offset]
1922
  * eax = [horizontal offset]*65536 + [vertical offset]
1920
Remarks:
1923
Remarks:
1921
  * Scroll data is available for active window only.
1924
  * Scroll data is available for active window only.
1922
  * Values are zeroed after reading.
1925
  * Values are zeroed after reading.
1923
  * Values are signed.
1926
  * Values are signed.
1924
 
1927
 
1925
-------- Subfunction 8 - load cursor, specifying the encoding --------
1928
-------- Subfunction 8 - load cursor, specifying the encoding --------
1926
Parameters:
1929
Parameters:
1927
  * eax = 37 - function number
1930
  * eax = 37 - function number
1928
  * ebx = 8 - subfunction number
1931
  * ebx = 8 - subfunction number
1929
  * ecx = pointer to the cursor file path string
1932
  * ecx = pointer to the cursor file path string
1930
  * edx = string encoding, details can be found in function 80 description.
1933
  * edx = string encoding, details can be found in function 80 description.
1931
Returned value:
1934
Returned value:
1932
  * eax = cursor handle, 0 - failed
1935
  * eax = cursor handle, 0 - failed
1933
 
1936
 
1934
---------------------- Constants for registers: ----------------------
1937
---------------------- Constants for registers: ----------------------
1935
  eax - SF_MOUSE_GET (37)
1938
  eax - SF_MOUSE_GET (37)
1936
  ebx - SSF_SCREEN_POSITION (0), SSF_WINDOW_POSITION (1),
1939
  ebx - SSF_SCREEN_POSITION (0), SSF_WINDOW_POSITION (1),
1937
    SSF_BUTTON (2), SSF_BUTTON_EXT (3), SSF_LOAD_CURSOR (4),
1940
    SSF_BUTTON (2), SSF_BUTTON_EXT (3), SSF_LOAD_CURSOR (4),
1938
    SSF_SET_CURSOR (5), SSF_DEL_CURSOR (6), SSF_SCROLL_DATA (7)
1941
    SSF_SET_CURSOR (5), SSF_DEL_CURSOR (6), SSF_SCROLL_DATA (7)
1939
======================================================================
1942
======================================================================
1940
====================== Function 38 - draw line. ======================
1943
====================== Function 38 - draw line. ======================
1941
======================================================================
1944
======================================================================
1942
Parameters:
1945
Parameters:
1943
  * eax = 38 - function number
1946
  * eax = 38 - function number
1944
  * ebx = [start coordinate on axis x]*65536 +
1947
  * ebx = [start coordinate on axis x]*65536 +
1945
              [end coordinate on axis x]
1948
              [end coordinate on axis x]
1946
  * ecx = [start coordinate on axis y]*65536 +
1949
  * ecx = [start coordinate on axis y]*65536 +
1947
              [end coordinate on axis y]
1950
              [end coordinate on axis y]
1948
  * edx = 0x00RRGGBB - color
1951
  * edx = 0x00RRGGBB - color
1949
    edx = 0x01xxxxxx - draw inversed line
1952
    edx = 0x01xxxxxx - draw inversed line
1950
          (low 24 bits are ignored)
1953
          (low 24 bits are ignored)
1951
Returned value:
1954
Returned value:
1952
  * function does not return value
1955
  * function does not return value
1953
Remarks:
1956
Remarks:
1954
  * Coordinates are relative to the window.
1957
  * Coordinates are relative to the window.
1955
  * End point is also drawn.
1958
  * End point is also drawn.
1956
 
1959
 
1957
---------------------- Constants for registers: ----------------------
1960
---------------------- Constants for registers: ----------------------
1958
  eax - SF_DRAW_LINE (38)
1961
  eax - SF_DRAW_LINE (38)
1959
======================================================================
1962
======================================================================
1960
== Function 39, subfunction 1 - get a size of the background image. ==
1963
== Function 39, subfunction 1 - get a size of the background image. ==
1961
======================================================================
1964
======================================================================
1962
Parameters:
1965
Parameters:
1963
  * eax = 39 - function number
1966
  * eax = 39 - function number
1964
  * ebx = 1 - subfunction number
1967
  * ebx = 1 - subfunction number
1965
Returned value:
1968
Returned value:
1966
  * eax = [width]*65536 + [height]
1969
  * eax = [width]*65536 + [height]
1967
Remarks:
1970
Remarks:
1968
  * There is a pair function to set sizes of background image -
1971
  * There is a pair function to set sizes of background image -
1969
    subfunction 1 of function 15. After which it is necessary,
1972
    subfunction 1 of function 15. After which it is necessary,
1970
    of course, anew to define image.
1973
    of course, anew to define image.
1971
 
1974
 
1972
---------------------- Constants for registers: ----------------------
1975
---------------------- Constants for registers: ----------------------
1973
  eax - SF_BACKGROUND_GET (39)
1976
  eax - SF_BACKGROUND_GET (39)
1974
======================================================================
1977
======================================================================
1975
== Function 39, subfunction 2 - get pixel from the background image. =
1978
== Function 39, subfunction 2 - get pixel from the background image. =
1976
======================================================================
1979
======================================================================
1977
Parameters:
1980
Parameters:
1978
  * eax = 39 - function number
1981
  * eax = 39 - function number
1979
  * ebx = 2 - subfunction number
1982
  * ebx = 2 - subfunction number
1980
  * ecx = offset
1983
  * ecx = offset
1981
Returned value:
1984
Returned value:
1982
  * eax = 0x00RRGGBB - pixel color, if offset is valid
1985
  * eax = 0x00RRGGBB - pixel color, if offset is valid
1983
    (less than 0x160000-16)
1986
    (less than 0x160000-16)
1984
  * eax = 2 otherwise
1987
  * eax = 2 otherwise
1985
Remarks:
1988
Remarks:
1986
  * Do not rely on returned value for invalid offsets, it may be
1989
  * Do not rely on returned value for invalid offsets, it may be
1987
    changed in future kernel versions.
1990
    changed in future kernel versions.
1988
  * Offset for pixel with coordinates (x,y)
1991
  * Offset for pixel with coordinates (x,y)
1989
    is calculated as (x+y*xsize)*3.
1992
    is calculated as (x+y*xsize)*3.
1990
  * There is a pair function to set pixel on the background image -
1993
  * There is a pair function to set pixel on the background image -
1991
    subfunction 2 of function 15.
1994
    subfunction 2 of function 15.
1992
 
1995
 
1993
---------------------- Constants for registers: ----------------------
1996
---------------------- Constants for registers: ----------------------
1994
  eax - SF_BACKGROUND_GET (39)
1997
  eax - SF_BACKGROUND_GET (39)
1995
======================================================================
1998
======================================================================
1996
== Function 39, subfunction 4 - get drawing mode for the background. =
1999
== Function 39, subfunction 4 - get drawing mode for the background. =
1997
======================================================================
2000
======================================================================
1998
Parameters:
2001
Parameters:
1999
  * eax = 39 - function number
2002
  * eax = 39 - function number
2000
  * ebx = 4 - subfunction number
2003
  * ebx = 4 - subfunction number
2001
Returned value:
2004
Returned value:
2002
  * eax = 1 - tile
2005
  * eax = 1 - tile
2003
  * eax = 2 - stretch
2006
  * eax = 2 - stretch
2004
Remarks:
2007
Remarks:
2005
  * There is a pair function to set drawing mode -
2008
  * There is a pair function to set drawing mode -
2006
    subfunction 4 of function 15.
2009
    subfunction 4 of function 15.
2007
 
2010
 
2008
---------------------- Constants for registers: ----------------------
2011
---------------------- Constants for registers: ----------------------
2009
  eax - SF_BACKGROUND_GET (39)
2012
  eax - SF_BACKGROUND_GET (39)
2010
======================================================================
2013
======================================================================
2011
=========== Function 40 - set the mask for expected events. ==========
2014
=========== Function 40 - set the mask for expected events. ==========
2012
======================================================================
2015
======================================================================
2013
The mask for expected events affects function working with events
2016
The mask for expected events affects function working with events
2014
10, 11, 23 - they notify only about events allowed by this mask.
2017
10, 11, 23 - they notify only about events allowed by this mask.
2015
Parameters:
2018
Parameters:
2016
  * eax = 40 - function number
2019
  * eax = 40 - function number
2017
  * ebx = mask: bit i corresponds to event i+1 (see list of events)
2020
  * ebx = mask: bit i corresponds to event i+1 (see list of events)
2018
    (set bit permits notice on event)
2021
    (set bit permits notice on event)
2019
    bit 31: mouse active/inactive filter
2022
    bit 31: mouse active/inactive filter
2020
    bit 31 = 0 - inactive window receive mouse events
2023
    bit 31 = 0 - inactive window receive mouse events
2021
    bit 31 = 1 - inactive window does not receive mouse events
2024
    bit 31 = 1 - inactive window does not receive mouse events
2022
    bit 30: cursor position filter
2025
    bit 30: cursor position filter
2023
    bit 30 = 0 = the window receive mouse events if cursor
2026
    bit 30 = 0 = the window receive mouse events if cursor
2024
                 outside window
2027
                 outside window
2025
    bit 30 = 1 - the window does not receive mouse events if cursor
2028
    bit 30 = 1 - the window does not receive mouse events if cursor
2026
                 outside window
2029
                 outside window
2027
Returned value:
2030
Returned value:
2028
  * eax = previous value of mask
2031
  * eax = previous value of mask
2029
Remarks:
2032
Remarks:
2030
  * Default mask (7=111b) enables notices about redraw,
2033
  * Default mask (7=111b) enables notices about redraw,
2031
    keys and buttons. This is enough for many applications.
2034
    keys and buttons. This is enough for many applications.
2032
  * Events prohibited in the mask are saved anyway, when come;
2035
  * Events prohibited in the mask are saved anyway, when come;
2033
    they are simply not informed with event functions.
2036
    they are simply not informed with event functions.
2034
  * Event functions take into account the mask on moment of
2037
  * Event functions take into account the mask on moment of
2035
    function call, not on moment of event arrival.
2038
    function call, not on moment of event arrival.
2036
 
2039
 
2037
---------------------- Constants for registers: ----------------------
2040
---------------------- Constants for registers: ----------------------
2038
  eax - SF_SET_EVENTS_MASK (40)
2041
  eax - SF_SET_EVENTS_MASK (40)
2039
======================================================================
2042
======================================================================
2040
================ Function 43 - input/output to a port. ===============
2043
================ Function 43 - input/output to a port. ===============
2041
======================================================================
2044
======================================================================
2042
 
2045
 
2043
------------------------ Output data to port -------------------------
2046
------------------------ Output data to port -------------------------
2044
Parameters:
2047
Parameters:
2045
  * eax = 43 - function number
2048
  * eax = 43 - function number
2046
  * bl = byte for output
2049
  * bl = byte for output
2047
  * ecx = port number 0xnnnn (from 0 to 0xFFFF)
2050
  * ecx = port number 0xnnnn (from 0 to 0xFFFF)
2048
Returned value:
2051
Returned value:
2049
  * eax = 0 - success
2052
  * eax = 0 - success
2050
  * eax = 1 - the thread has not reserved the selected port
2053
  * eax = 1 - the thread has not reserved the selected port
2051
 
2054
 
2052
------------------------ Input data from port ------------------------
2055
------------------------ Input data from port ------------------------
2053
Parameters:
2056
Parameters:
2054
  * eax = 43 - function number
2057
  * eax = 43 - function number
2055
  * ebx is ignored
2058
  * ebx is ignored
2056
  * ecx = 0x8000nnnn, where nnnn = port number (from 0 to 0xFFFF)
2059
  * ecx = 0x8000nnnn, where nnnn = port number (from 0 to 0xFFFF)
2057
Returned value:
2060
Returned value:
2058
  * eax = 0 - success, thus ebx = entered byte
2061
  * eax = 0 - success, thus ebx = entered byte
2059
  * eax = 1 - the thread has not reserved the selected port
2062
  * eax = 1 - the thread has not reserved the selected port
2060
Remarks:
2063
Remarks:
2061
  * Previously the thread must reserve the selected port
2064
  * Previously the thread must reserve the selected port
2062
    for itself by function 46.
2065
    for itself by function 46.
2063
  * Instead of call to this function it is better to use
2066
  * Instead of call to this function it is better to use
2064
    processor instructions in/out - this is much
2067
    processor instructions in/out - this is much
2065
    faster and a bit shorter and easier.
2068
    faster and a bit shorter and easier.
2066
 
2069
 
2067
---------------------- Constants for registers: ----------------------
2070
---------------------- Constants for registers: ----------------------
2068
  eax - SF_PORT_IN_OUT (43)
2071
  eax - SF_PORT_IN_OUT (43)
2069
======================================================================
2072
======================================================================
2070
====== Function 46 - reserve/free a group of input/output ports. =====
2073
====== Function 46 - reserve/free a group of input/output ports. =====
2071
======================================================================
2074
======================================================================
2072
To work with reserved ports an application can access directly by
2075
To work with reserved ports an application can access directly by
2073
commands in/out (recommended way) and can use function 43
2076
commands in/out (recommended way) and can use function 43
2074
(not recommended way).
2077
(not recommended way).
2075
Parameters:
2078
Parameters:
2076
  * eax = 46 - function number
2079
  * eax = 46 - function number
2077
  * ebx = 0 - reserve, 1 - free
2080
  * ebx = 0 - reserve, 1 - free
2078
  * ecx = start port number
2081
  * ecx = start port number
2079
  * edx = end port number (inclusive)
2082
  * edx = end port number (inclusive)
2080
Returned value:
2083
Returned value:
2081
  * eax = 0 - success
2084
  * eax = 0 - success
2082
  * eax = 1 - error
2085
  * eax = 1 - error
2083
Remarks:
2086
Remarks:
2084
  * For ports reservation: an error occurs if and only if
2087
  * For ports reservation: an error occurs if and only if
2085
    one from the following condition satisfies:
2088
    one from the following condition satisfies:
2086
    * start port is more than end port;
2089
    * start port is more than end port;
2087
    * the selected range contains incorrect port number
2090
    * the selected range contains incorrect port number
2088
      (correct are from 0 to 0xFFFF);
2091
      (correct are from 0 to 0xFFFF);
2089
    * limit for the total number of reserved areas is exceeded
2092
    * limit for the total number of reserved areas is exceeded
2090
      (maximum 255 are allowed);
2093
      (maximum 255 are allowed);
2091
    * the selected range intersects with any of earlier reserved
2094
    * the selected range intersects with any of earlier reserved
2092
  * For ports free: an error is an attempt to free range,
2095
  * For ports free: an error is an attempt to free range,
2093
    that was not earlier reserved by this function
2096
    that was not earlier reserved by this function
2094
    (with same ecx,edx).
2097
    (with same ecx,edx).
2095
  * If an error occurs (for both cases) function performs no action.
2098
  * If an error occurs (for both cases) function performs no action.
2096
  * At booting the system reserves for itself ports
2099
  * At booting the system reserves for itself ports
2097
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (inclusively).
2100
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (inclusively).
2098
  * When a thread terminates, all reserved by it ports
2101
  * When a thread terminates, all reserved by it ports
2099
    are freed automatically.
2102
    are freed automatically.
2100
 
2103
 
2101
---------------------- Constants for registers: ----------------------
2104
---------------------- Constants for registers: ----------------------
2102
  eax - SF_SET_PORTS (46)
2105
  eax - SF_SET_PORTS (46)
2103
======================================================================
2106
======================================================================
2104
============= Function 47 - draw a number in the window. =============
2107
============= Function 47 - draw a number in the window. =============
2105
======================================================================
2108
======================================================================
2106
Parameters:
2109
Parameters:
2107
  * eax = 47 - function number
2110
  * eax = 47 - function number
2108
  * ebx = parameters of conversion number to text:
2111
  * ebx = parameters of conversion number to text:
2109
    * bl = 0 - ecx contains number
2112
    * bl = 0 - ecx contains number
2110
    * bl = 1 - ecx contains pointer to dword/qword-number
2113
    * bl = 1 - ecx contains pointer to dword/qword-number
2111
    * bh = 0 - display in decimal number system
2114
    * bh = 0 - display in decimal number system
2112
    * bh = 1 - display in hexadecimal system
2115
    * bh = 1 - display in hexadecimal system
2113
    * bh = 2 - display in binary system
2116
    * bh = 2 - display in binary system
2114
    * bits 16-21 = how many digits to display
2117
    * bits 16-21 = how many digits to display
2115
    * bits 22-29 reserved and must be set to 0
2118
    * bits 22-29 reserved and must be set to 0
2116
    * bit 30 set = display qword (64-bit) number (must be bl=1)
2119
    * bit 30 set = display qword (64-bit) number (must be bl=1)
2117
    * bit 31 set = do not display leading zeroes of the number
2120
    * bit 31 set = do not display leading zeroes of the number
2118
  * ecx = number (if bl=0) or pointer (if bl=1)
2121
  * ecx = number (if bl=0) or pointer (if bl=1)
2119
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2122
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2120
  * esi = 0xXXRRGGBB, where
2123
  * esi = 0xXXRRGGBB, where
2121
    * RR, GG, BB specify text color
2124
    * RR, GG, BB specify text color
2122
    * XX = 0B0FCSSS (bits):
2125
    * XX = 0B0FCSSS (bits):
2123
      * B=1 - fill background (color = edi)
2126
      * B=1 - fill background (color = edi)
2124
      * F specifies the font:
2127
      * F specifies the font:
2125
        0 = 6x9
2128
        0 = 6x9
2126
        1 = 8x16
2129
        1 = 8x16
2127
      * C=0 - draw to the window,
2130
      * C=0 - draw to the window,
2128
        C=1 - draw to the user buffer (edi)
2131
        C=1 - draw to the user buffer (edi)
2129
      * SSS = (size multiplier)-1, so 0 = x1, 7 = x8
2132
      * SSS = (size multiplier)-1, so 0 = x1, 7 = x8
2130
Returned value:
2133
Returned value:
2131
  * function does not return value
2134
  * function does not return value
2132
Remarks:
2135
Remarks:
2133
  * The given length must not exceed 60.
2136
  * The given length must not exceed 60.
2134
  * The exactly given amount of digits is output. If number is small
2137
  * The exactly given amount of digits is output. If number is small
2135
    and can be written by smaller amount of digits, it is supplemented
2138
    and can be written by smaller amount of digits, it is supplemented
2136
    by leading zeroes; if the number is big and can not be written by
2139
    by leading zeroes; if the number is big and can not be written by
2137
    given amount of digits, extra digits are not drawn.
2140
    given amount of digits, extra digits are not drawn.
2138
 
2141
 
2139
---------------------- Constants for registers: ----------------------
2142
---------------------- Constants for registers: ----------------------
2140
  eax - SF_DRAW_NUMBER (47)
2143
  eax - SF_DRAW_NUMBER (47)
2141
======================================================================
2144
======================================================================
2142
========= Function 48, subfunction 0 - apply screen settings. ========
2145
========= Function 48, subfunction 0 - apply screen settings. ========
2143
======================================================================
2146
======================================================================
2144
Parameters:
2147
Parameters:
2145
  * eax = 48 - function number
2148
  * eax = 48 - function number
2146
  * ebx = 0 - subfunction number
2149
  * ebx = 0 - subfunction number
2147
  * ecx = 0 - reserved
2150
  * ecx = 0 - reserved
2148
Returned value:
2151
Returned value:
2149
  * function does not return value
2152
  * function does not return value
2150
Remarks:
2153
Remarks:
2151
  * Function redraws the screen after parameters change by
2154
  * Function redraws the screen after parameters change by
2152
    subfunctions 1 and 2.
2155
    subfunctions 1 and 2.
2153
  * Function call without prior call to one of indicated subfunctions
2156
  * Function call without prior call to one of indicated subfunctions
2154
    is ignored.
2157
    is ignored.
2155
  * Function call with nonzero ecx is ignored.
2158
  * Function call with nonzero ecx is ignored.
2156
 
2159
 
2157
---------------------- Constants for registers: ----------------------
2160
---------------------- Constants for registers: ----------------------
2158
  eax - SF_STYLE_SETTINGS (48)
2161
  eax - SF_STYLE_SETTINGS (48)
2159
  ebx - SSF_APPLY (0)
2162
  ebx - SSF_APPLY (0)
2160
======================================================================
2163
======================================================================
2161
=========== Function 48, subfunction 1 - set button style. ===========
2164
=========== Function 48, subfunction 1 - set button style. ===========
2162
======================================================================
2165
======================================================================
2163
Parameters:
2166
Parameters:
2164
  * eax = 48 - function number
2167
  * eax = 48 - function number
2165
  * ebx = 1 - subfunction number
2168
  * ebx = 1 - subfunction number
2166
  * ecx = button style:
2169
  * ecx = button style:
2167
    * 0 = flat
2170
    * 0 = flat
2168
    * 1 = 3d
2171
    * 1 = 3d
2169
Returned value:
2172
Returned value:
2170
  * function does not return value
2173
  * function does not return value
2171
Remarks:
2174
Remarks:
2172
  * After call to this function one should redraw the screen by
2175
  * After call to this function one should redraw the screen by
2173
    subfunction 0.
2176
    subfunction 0.
2174
  * Button style influences only to their draw of function 8.
2177
  * Button style influences only to their draw of function 8.
2175
 
2178
 
2176
---------------------- Constants for registers: ----------------------
2179
---------------------- Constants for registers: ----------------------
2177
  eax - SF_STYLE_SETTINGS (48)
2180
  eax - SF_STYLE_SETTINGS (48)
2178
  ebx - SSF_SET_BUTTON_STYLE (1)
2181
  ebx - SSF_SET_BUTTON_STYLE (1)
2179
======================================================================
2182
======================================================================
2180
====== Function 48, subfunction 2 - set standard window colors. ======
2183
====== Function 48, subfunction 2 - set standard window colors. ======
2181
======================================================================
2184
======================================================================
2182
Parameters:
2185
Parameters:
2183
  * eax = 48 - function number
2186
  * eax = 48 - function number
2184
  * ebx = 2 - subfunction number
2187
  * ebx = 2 - subfunction number
2185
  * ecx = pointer to the color table
2188
  * ecx = pointer to the color table
2186
  * edx = size of the color table
2189
  * edx = size of the color table
2187
    (must be 40 bytes for future compatibility)
2190
    (must be 40 bytes for future compatibility)
2188
Format of the color table is shown in description of subfunction 3.
2191
Format of the color table is shown in description of subfunction 3.
2189
Returned value:
2192
Returned value:
2190
  * function does not return value
2193
  * function does not return value
2191
Remarks:
2194
Remarks:
2192
  * After call to this function one should redraw the screen by
2195
  * After call to this function one should redraw the screen by
2193
    subfunction 0.
2196
    subfunction 0.
2194
  * Table of standard colors influences only to applications,
2197
  * Table of standard colors influences only to applications,
2195
    which receive this table obviously (by subfunction 3)
2198
    which receive this table obviously (by subfunction 3)
2196
    and use it (specifying colors from it to drawing functions).
2199
    and use it (specifying colors from it to drawing functions).
2197
  * Table of standard colors is included in skin and is installed
2200
  * Table of standard colors is included in skin and is installed
2198
    anew with skin installation (by subfunction 8).
2201
    anew with skin installation (by subfunction 8).
2199
  * Color table can be viewed/changed interactively with
2202
  * Color table can be viewed/changed interactively with
2200
    the application 'desktop'.
2203
    the application 'desktop'.
2201
 
2204
 
2202
---------------------- Constants for registers: ----------------------
2205
---------------------- Constants for registers: ----------------------
2203
  eax - SF_STYLE_SETTINGS (48)
2206
  eax - SF_STYLE_SETTINGS (48)
2204
  ebx - SSF_SET_COLORS (2)
2207
  ebx - SSF_SET_COLORS (2)
2205
======================================================================
2208
======================================================================
2206
====== Function 48, subfunction 3 - get standard window colors. ======
2209
====== Function 48, subfunction 3 - get standard window colors. ======
2207
======================================================================
2210
======================================================================
2208
Parameters:
2211
Parameters:
2209
  * eax = 48 - function number
2212
  * eax = 48 - function number
2210
  * ebx = 3 - subfunction number
2213
  * ebx = 3 - subfunction number
2211
  * ecx = pointer to the buffer with size edx bytes,
2214
  * ecx = pointer to the buffer with size edx bytes,
2212
    where table will be written
2215
    where table will be written
2213
  * edx = size of color table
2216
  * edx = size of color table
2214
    (must be 40 bytes for future compatibility)
2217
    (must be 40 bytes for future compatibility)
2215
Returned value:
2218
Returned value:
2216
  * function does not return value
2219
  * function does not return value
2217
Format of the color table:
2220
Format of the color table:
2218
each item is dword-value for color 0x00RRGGBB
2221
each item is dword-value for color 0x00RRGGBB
2219
  * +0: dword: frames - color of frame
2222
  * +0: dword: frames - color of frame
2220
  * +4: dword: grab - color of header
2223
  * +4: dword: grab - color of header
2221
  * +8: dword: grab_button - color of button on header bar
2224
  * +8: dword: grab_button - color of button on header bar
2222
  * +12 = +0xC: dword: grab_button_text - color of text on button
2225
  * +12 = +0xC: dword: grab_button_text - color of text on button
2223
    on header bar
2226
    on header bar
2224
  * +16 = +0x10: dword: grab_text - color of text on header
2227
  * +16 = +0x10: dword: grab_text - color of text on header
2225
  * +20 = +0x14: dword: work - color of working area
2228
  * +20 = +0x14: dword: work - color of working area
2226
  * +24 = +0x18: dword: work_button - color of button in working area
2229
  * +24 = +0x18: dword: work_button - color of button in working area
2227
  * +28 = +0x1C: dword: work_button_text - color of text on button
2230
  * +28 = +0x1C: dword: work_button_text - color of text on button
2228
    in working area
2231
    in working area
2229
  * +32 = +0x20: dword: work_text - color of text in working area
2232
  * +32 = +0x20: dword: work_text - color of text in working area
2230
  * +36 = +0x24: dword: work_graph - color of graphics in working area
2233
  * +36 = +0x24: dword: work_graph - color of graphics in working area
2231
Remarks:
2234
Remarks:
2232
  * Structure of the color table is described in the standard
2235
  * Structure of the color table is described in the standard
2233
    include file 'macros.inc' as 'system_colors'; for example,
2236
    include file 'macros.inc' as 'system_colors'; for example,
2234
    it is possible to write:
2237
    it is possible to write:
2235
        sc      system_colors           ; variable declaration
2238
        sc      system_colors           ; variable declaration
2236
        ...                             ; somewhere one must call
2239
        ...                             ; somewhere one must call
2237
                                        ; this function with ecx=sc
2240
                                        ; this function with ecx=sc
2238
        mov     ecx, [sc.work_button_text]      ; read text color on
2241
        mov     ecx, [sc.work_button_text]      ; read text color on
2239
                                        ; button in working area
2242
                                        ; button in working area
2240
  * A program itself decides to use or not to use color table.
2243
  * A program itself decides to use or not to use color table.
2241
    For usage program must simply at calls to drawing functions select
2244
    For usage program must simply at calls to drawing functions select
2242
    color taken from the table.
2245
    color taken from the table.
2243
  * At change of the table of standard colors (by subfunction 2 with
2246
  * At change of the table of standard colors (by subfunction 2 with
2244
    the subsequent application of changes by subfunction 0 or
2247
    the subsequent application of changes by subfunction 0 or
2245
    at skin set by subfunction 8) the system sends to all windows
2248
    at skin set by subfunction 8) the system sends to all windows
2246
    redraw message (the event with code 1).
2249
    redraw message (the event with code 1).
2247
  * Color table can be viewed/changed interactively with
2250
  * Color table can be viewed/changed interactively with
2248
    the application 'desktop'.
2251
    the application 'desktop'.
2249
 
2252
 
2250
---------------------- Constants for registers: ----------------------
2253
---------------------- Constants for registers: ----------------------
2251
  eax - SF_STYLE_SETTINGS (48)
2254
  eax - SF_STYLE_SETTINGS (48)
2252
  ebx - SSF_GET_COLORS (3)
2255
  ebx - SSF_GET_COLORS (3)
2253
======================================================================
2256
======================================================================
2254
============ Function 48, subfunction 4 - get skin height. ===========
2257
============ Function 48, subfunction 4 - get skin height. ===========
2255
======================================================================
2258
======================================================================
2256
Parameters:
2259
Parameters:
2257
  * eax = 48 - function number
2260
  * eax = 48 - function number
2258
  * ebx = 4 - subfunction number
2261
  * ebx = 4 - subfunction number
2259
Returned value:
2262
Returned value:
2260
  * eax = skin height
2263
  * eax = skin height
2261
Remarks:
2264
Remarks:
2262
  * Skin height is defined as the height of a header
2265
  * Skin height is defined as the height of a header
2263
    of skinned windows.
2266
    of skinned windows.
2264
  * See also general structure of window in the description
2267
  * See also general structure of window in the description
2265
    of function 0.
2268
    of function 0.
2266
 
2269
 
2267
---------------------- Constants for registers: ----------------------
2270
---------------------- Constants for registers: ----------------------
2268
  eax - SF_STYLE_SETTINGS (48)
2271
  eax - SF_STYLE_SETTINGS (48)
2269
  ebx - SSF_GET_SKIN_HEIGHT (4)
2272
  ebx - SSF_GET_SKIN_HEIGHT (4)
2270
======================================================================
2273
======================================================================
2271
======== Function 48, subfunction 5 - get screen working area. =======
2274
======== Function 48, subfunction 5 - get screen working area. =======
2272
======================================================================
2275
======================================================================
2273
Parameters:
2276
Parameters:
2274
  * eax = 48 - function number
2277
  * eax = 48 - function number
2275
  * ebx = 5 - subfunction number
2278
  * ebx = 5 - subfunction number
2276
Returned value:
2279
Returned value:
2277
  * eax = [left]*65536 + [right]
2280
  * eax = [left]*65536 + [right]
2278
  * ebx = [top]*65536 + [bottom]
2281
  * ebx = [top]*65536 + [bottom]
2279
Remarks:
2282
Remarks:
2280
  * The screen working area defines position and coordinates of
2283
  * The screen working area defines position and coordinates of
2281
    a maximized window.
2284
    a maximized window.
2282
  * The screen working area in view of normal work is all screen
2285
  * The screen working area in view of normal work is all screen
2283
    without taskbar ('@taskbar' application).
2286
    without taskbar ('@taskbar' application).
2284
  * (left,top) are coordinates of the left upper corner,
2287
  * (left,top) are coordinates of the left upper corner,
2285
    (right,bottom) are coordinates of the right lower one.
2288
    (right,bottom) are coordinates of the right lower one.
2286
    Thus the size of working area on x axis can be calculated by
2289
    Thus the size of working area on x axis can be calculated by
2287
    formula right-left+1, on y axis - by formula bottom-right+1.
2290
    formula right-left+1, on y axis - by formula bottom-right+1.
2288
  * See also function 14,
2291
  * See also function 14,
2289
    to get sizes of all screen.
2292
    to get sizes of all screen.
2290
  * There is a pair function to set working area - subfunction 6.
2293
  * There is a pair function to set working area - subfunction 6.
2291
 
2294
 
2292
---------------------- Constants for registers: ----------------------
2295
---------------------- Constants for registers: ----------------------
2293
  eax - SF_STYLE_SETTINGS (48)
2296
  eax - SF_STYLE_SETTINGS (48)
2294
  ebx - SSF_GET_SCREEN_AREA (5)
2297
  ebx - SSF_GET_SCREEN_AREA (5)
2295
======================================================================
2298
======================================================================
2296
======== Function 48, subfunction 6 - set screen working area. =======
2299
======== Function 48, subfunction 6 - set screen working area. =======
2297
======================================================================
2300
======================================================================
2298
Parameters:
2301
Parameters:
2299
  * eax = 48 - function number
2302
  * eax = 48 - function number
2300
  * ebx = 6 - subfunction number
2303
  * ebx = 6 - subfunction number
2301
  * ecx = [left]*65536 + [right]
2304
  * ecx = [left]*65536 + [right]
2302
  * edx = [top]*65536 + [bottom]
2305
  * edx = [top]*65536 + [bottom]
2303
Returned value:
2306
Returned value:
2304
  * function does not return value
2307
  * function does not return value
2305
Remarks:
2308
Remarks:
2306
  * The screen working area defines position and coordinates of
2309
  * The screen working area defines position and coordinates of
2307
    a maximized window.
2310
    a maximized window.
2308
  * This function is used only by the application '@taskbar',
2311
  * This function is used only by the application '@taskbar',
2309
    which set working area to all screen without taskbar.
2312
    which set working area to all screen without taskbar.
2310
  * (left,top) are coordinates of the left upper corner,
2313
  * (left,top) are coordinates of the left upper corner,
2311
    (right,bottom) are coordinates of the right lower one.
2314
    (right,bottom) are coordinates of the right lower one.
2312
    Thus the size of working area on x axis can be calculated by
2315
    Thus the size of working area on x axis can be calculated by
2313
    formula right-left+1, on y axis - by formula bottom-right+1.
2316
    formula right-left+1, on y axis - by formula bottom-right+1.
2314
  * If 'left'>='right', x-coordinate of working area is not changed.
2317
  * If 'left'>='right', x-coordinate of working area is not changed.
2315
    If 'left'<0, 'left' will not be set. If 'right' is greater than or
2318
    If 'left'<0, 'left' will not be set. If 'right' is greater than or
2316
    equal to screen width, 'right' will not be set.
2319
    equal to screen width, 'right' will not be set.
2317
    Similarly on y axis.
2320
    Similarly on y axis.
2318
  * See also function 14,
2321
  * See also function 14,
2319
    to get sizes of all screen.
2322
    to get sizes of all screen.
2320
  * There is a pair function to get working area - subfunction 5.
2323
  * There is a pair function to get working area - subfunction 5.
2321
  * This function redraws the screen automatically,
2324
  * This function redraws the screen automatically,
2322
    updating coordinates and sizes of maximized windows.
2325
    updating coordinates and sizes of maximized windows.
2323
    The system sends to all windows redraw message (the event 1).
2326
    The system sends to all windows redraw message (the event 1).
2324
 
2327
 
2325
---------------------- Constants for registers: ----------------------
2328
---------------------- Constants for registers: ----------------------
2326
  eax - SF_STYLE_SETTINGS (48)
2329
  eax - SF_STYLE_SETTINGS (48)
2327
  ebx - SSF_SET_SCREEN_AREA (6)
2330
  ebx - SSF_SET_SCREEN_AREA (6)
2328
======================================================================
2331
======================================================================
2329
=========== Function 48, subfunction 7 - get skin margins. ===========
2332
=========== Function 48, subfunction 7 - get skin margins. ===========
2330
======================================================================
2333
======================================================================
2331
Returns the area of a header of a skinned window, intended for
2334
Returns the area of a header of a skinned window, intended for
2332
a text of a header.
2335
a text of a header.
2333
Parameters:
2336
Parameters:
2334
  * eax = 48 - function number
2337
  * eax = 48 - function number
2335
  * ebx = 7 - subfunction number
2338
  * ebx = 7 - subfunction number
2336
Returned value:
2339
Returned value:
2337
  * eax = [left]*65536 + [right]
2340
  * eax = [left]*65536 + [right]
2338
  * ebx = [top]*65536 + [bottom]
2341
  * ebx = [top]*65536 + [bottom]
2339
Remarks:
2342
Remarks:
2340
  * An application decides itself to use or not to use this function.
2343
  * An application decides itself to use or not to use this function.
2341
  * It is recommended to take into account returned value
2344
  * It is recommended to take into account returned value
2342
    of this function for choice of a place for drawing header text
2345
    of this function for choice of a place for drawing header text
2343
    (by function 4) or a substitute of header text
2346
    (by function 4) or a substitute of header text
2344
    (at the discretion of an application).
2347
    (at the discretion of an application).
2345
 
2348
 
2346
---------------------- Constants for registers: ----------------------
2349
---------------------- Constants for registers: ----------------------
2347
  eax - SF_STYLE_SETTINGS (48)
2350
  eax - SF_STYLE_SETTINGS (48)
2348
  ebx - SSF_GET_SKIN_MARGINS (7)
2351
  ebx - SSF_GET_SKIN_MARGINS (7)
2349
======================================================================
2352
======================================================================
2350
============= Function 48, subfunction 8 - set used skin. ============
2353
============= Function 48, subfunction 8 - set used skin. ============
2351
======================================================================
2354
======================================================================
2352
Parameters:
2355
Parameters:
2353
  * eax = 48 - function number
2356
  * eax = 48 - function number
2354
  * ebx = 8 - subfunction number
2357
  * ebx = 8 - subfunction number
2355
  * ecx = pointer to filename of the skin
2358
  * ecx = pointer to filename of the skin
2356
Returned value:
2359
Returned value:
2357
  * eax = 0 - success
2360
  * eax = 0 - success
2358
  * otherwise eax = file system error code; if file does not
2361
  * otherwise eax = file system error code; if file does not
2359
    contain valid skin, function returns error 3
2362
    contain valid skin, function returns error 3
2360
    (unknown file system).
2363
    (unknown file system).
2361
Remarks:
2364
Remarks:
2362
  * After successful skin loading the system sends to all windows
2365
  * After successful skin loading the system sends to all windows
2363
    redraw message (the event 1).
2366
    redraw message (the event 1).
2364
  * At booting the system reads skin from file 'default.skn'
2367
  * At booting the system reads skin from file 'default.skn'
2365
    on ramdisk.
2368
    on ramdisk.
2366
  * User can change the skin statically by creating hisself
2369
  * User can change the skin statically by creating hisself
2367
    'default.skn' or dynamically with the application 'desktop'.
2370
    'default.skn' or dynamically with the application 'desktop'.
2368
 
2371
 
2369
---------------------- Constants for registers: ----------------------
2372
---------------------- Constants for registers: ----------------------
2370
  eax - SF_STYLE_SETTINGS (48)
2373
  eax - SF_STYLE_SETTINGS (48)
2371
  ebx - SSF_SET_SKIN (8)
2374
  ebx - SSF_SET_SKIN (8)
2372
======================================================================
2375
======================================================================
2373
====== Function 48, subfunction 9 - get font smoothing setting. ======
2376
====== Function 48, subfunction 9 - get font smoothing setting. ======
2374
======================================================================
2377
======================================================================
2375
Parameters:
2378
Parameters:
2376
  * eax = 48 - function number
2379
  * eax = 48 - function number
2377
  * ebx = 9 - subfunction number
2380
  * ebx = 9 - subfunction number
2378
Returned value:
2381
Returned value:
2379
  * eax = 2 - subpixel, 1 - anti-aliasing, 0 - off
2382
  * eax = 2 - subpixel, 1 - anti-aliasing, 0 - off
2380
 
2383
 
2381
---------------------- Constants for registers: ----------------------
2384
---------------------- Constants for registers: ----------------------
2382
  eax - SF_STYLE_SETTINGS (48)
2385
  eax - SF_STYLE_SETTINGS (48)
2383
  ebx - SSF_GET_FONT_SMOOTH (9)
2386
  ebx - SSF_GET_FONT_SMOOTH (9)
2384
======================================================================
2387
======================================================================
2385
========== Function 48, subfunction 10 - set font smoothing. =========
2388
========== Function 48, subfunction 10 - set font smoothing. =========
2386
======================================================================
2389
======================================================================
2387
Parameters:
2390
Parameters:
2388
  * eax = 48 - function number
2391
  * eax = 48 - function number
2389
  * ebx = 10 - subfunction number
2392
  * ebx = 10 - subfunction number
2390
  * cl  = 2 - subpixel, 1 - anti-aliasing, 0 - off
2393
  * cl  = 2 - subpixel, 1 - anti-aliasing, 0 - off
2391
 
2394
 
2392
---------------------- Constants for registers: ----------------------
2395
---------------------- Constants for registers: ----------------------
2393
  eax - SF_STYLE_SETTINGS (48)
2396
  eax - SF_STYLE_SETTINGS (48)
2394
  ebx - SSF_SET_FONT_SMOOTH (10)
2397
  ebx - SSF_SET_FONT_SMOOTH (10)
2395
======================================================================
2398
======================================================================
2396
============ Function 48, subfunction 11 - get font size. ============
2399
============ Function 48, subfunction 11 - get font size. ============
2397
======================================================================
2400
======================================================================
2398
Parameters:
2401
Parameters:
2399
  * eax = 48 - function number
2402
  * eax = 48 - function number
2400
  * ebx = 11 - subfunction number
2403
  * ebx = 11 - subfunction number
2401
Returned value:
2404
Returned value:
2402
  * eax = current font height in pixels
2405
  * eax = current font height in pixels
2403
 
2406
 
2404
---------------------- Constants for registers: ----------------------
2407
---------------------- Constants for registers: ----------------------
2405
  eax - SF_STYLE_SETTINGS (48)
2408
  eax - SF_STYLE_SETTINGS (48)
2406
  ebx - SSF_GET_FONT_SIZE (11)
2409
  ebx - SSF_GET_FONT_SIZE (11)
2407
======================================================================
2410
======================================================================
2408
============ Function 48, subfunction 12 - set font size. ============
2411
============ Function 48, subfunction 12 - set font size. ============
2409
======================================================================
2412
======================================================================
2410
Parameters:
2413
Parameters:
2411
  * eax = 48 - function number
2414
  * eax = 48 - function number
2412
  * ebx = 12 - subfunction number
2415
  * ebx = 12 - subfunction number
2413
  * cl  = new font height in pixels
2416
  * cl  = new font height in pixels
2414
 
2417
 
2415
---------------------- Constants for registers: ----------------------
2418
---------------------- Constants for registers: ----------------------
2416
  eax - SF_STYLE_SETTINGS (48)
2419
  eax - SF_STYLE_SETTINGS (48)
2417
  ebx - SSF_SET_FONT_SIZE (12)
2420
  ebx - SSF_SET_FONT_SIZE (12)
2418
======================================================================
2421
======================================================================
2419
== Function 48, subfunction 13 - set skin, specifying the encoding. ==
2422
== Function 48, subfunction 13 - set skin, specifying the encoding. ==
2420
======================================================================
2423
======================================================================
2421
Parameters:
2424
Parameters:
2422
  * eax = 48 - function number
2425
  * eax = 48 - function number
2423
  * ebx = 13 - subfunction number
2426
  * ebx = 13 - subfunction number
2424
  * ecx = pointer to the skin file path string
2427
  * ecx = pointer to the skin file path string
2425
  * edx = string encoding, details can be found in function 80 description.
2428
  * edx = string encoding, details can be found in function 80 description.
2426
Returned value:
2429
Returned value:
2427
  * eax = 0 - success
2430
  * eax = 0 - success
2428
  * otherwise eax = file system error code; if file does not
2431
  * otherwise eax = file system error code; if file does not
2429
    contain valid skin, function returns error 3
2432
    contain valid skin, function returns error 3
2430
    (unknown file system).
2433
    (unknown file system).
2431
Remarks:
2434
Remarks:
2432
  * After successful skin loading the system sends to all windows
2435
  * After successful skin loading the system sends to all windows
2433
    redraw message (the event 1).
2436
    redraw message (the event 1).
2434
  * At booting the system reads skin from file 'default.skn'
2437
  * At booting the system reads skin from file 'default.skn'
2435
    on ramdisk.
2438
    on ramdisk.
2436
  * User can change the skin statically by creating hisself
2439
  * User can change the skin statically by creating hisself
2437
    'default.skn' or dynamically with the application 'desktop'.
2440
    'default.skn' or dynamically with the application 'desktop'.
2438
 
2441
 
2439
======================================================================
2442
======================================================================
2440
=========== Function 49 - Advanced Power Management (APM). ===========
2443
=========== Function 49 - Advanced Power Management (APM). ===========
2441
======================================================================
2444
======================================================================
2442
Parameters:
2445
Parameters:
2443
  * eax = 49 - function number
2446
  * eax = 49 - function number
2444
  * dx = number of the APM function
2447
  * dx = number of the APM function
2445
    (analogue of ax in APM specification)
2448
    (analogue of ax in APM specification)
2446
  * bx, cx = parameters of the APM function
2449
  * bx, cx = parameters of the APM function
2447
Returned value:
2450
Returned value:
2448
  * 16-bit registers ax, bx, cx, dx, si, di and carry flag CF
2451
  * 16-bit registers ax, bx, cx, dx, si, di and carry flag CF
2449
    are set according to the APM specification
2452
    are set according to the APM specification
2450
  * high halves of 32-bit registers eax, ebx, ecx,
2453
  * high halves of 32-bit registers eax, ebx, ecx,
2451
    edx, esi, edi are destroyed
2454
    edx, esi, edi are destroyed
2452
Remarks:
2455
Remarks:
2453
  * APM 1.2 specification is described in the document
2456
  * APM 1.2 specification is described in the document
2454
    "Advanced Power Management (APM) BIOS Specification"
2457
    "Advanced Power Management (APM) BIOS Specification"
2455
    (Revision 1.2), available at
2458
    (Revision 1.2), available at
2456
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2459
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2457
    besides it is included in famous Interrupt List by Ralf Brown
2460
    besides it is included in famous Interrupt List by Ralf Brown
2458
    (http://www.pobox.com/~ralf/files.html,
2461
    (http://www.pobox.com/~ralf/files.html,
2459
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
2462
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
2460
 
2463
 
2461
---------------------- Constants for registers: ----------------------
2464
---------------------- Constants for registers: ----------------------
2462
  eax - SF_APM (49)
2465
  eax - SF_APM (49)
2463
======================================================================
2466
======================================================================
2464
=================== Function 50 - set window shape. ==================
2467
=================== Function 50 - set window shape. ==================
2465
======================================================================
2468
======================================================================
2466
Normal windows have rectangular shape. This function can give to
2469
Normal windows have rectangular shape. This function can give to
2467
a window any shape. The shape is given by a set of points inside
2470
a window any shape. The shape is given by a set of points inside
2468
the base rectangle belonging to a window. Position and coordinates
2471
the base rectangle belonging to a window. Position and coordinates
2469
of the base rectangle are set by function 0
2472
of the base rectangle are set by function 0
2470
and changed by function 67.
2473
and changed by function 67.
2471
 
2474
 
2472
--------------------------- Set shape data ---------------------------
2475
--------------------------- Set shape data ---------------------------
2473
Parameters:
2476
Parameters:
2474
  * eax = 50 - function number
2477
  * eax = 50 - function number
2475
  * ebx = 0 - subfunction number
2478
  * ebx = 0 - subfunction number
2476
  * ecx = pointer to shape data (array of bytes 0/1)
2479
  * ecx = pointer to shape data (array of bytes 0/1)
2477
Returned value:
2480
Returned value:
2478
  * function does not return value
2481
  * function does not return value
2479
 
2482
 
2480
-------------------------- Set shape scale ---------------------------
2483
-------------------------- Set shape scale ---------------------------
2481
Parameters:
2484
Parameters:
2482
  * eax = 50 - function number
2485
  * eax = 50 - function number
2483
  * ebx = 1 - subfunction number
2486
  * ebx = 1 - subfunction number
2484
  * ecx sets a scale: each byte of data defines
2487
  * ecx sets a scale: each byte of data defines
2485
    (2^scale)*(2^scale) pixels
2488
    (2^scale)*(2^scale) pixels
2486
Returned value:
2489
Returned value:
2487
  * function does not return value
2490
  * function does not return value
2488
Remarks:
2491
Remarks:
2489
  * Default scale is 0 (scale factor is 1). If in the shape data
2492
  * Default scale is 0 (scale factor is 1). If in the shape data
2490
    one byte corresponds to one pixel, there is no necessity
2493
    one byte corresponds to one pixel, there is no necessity
2491
    to set scale.
2494
    to set scale.
2492
  * Let's designate xsize = window width (in pixels), ysize = height;
2495
  * Let's designate xsize = window width (in pixels), ysize = height;
2493
    pay attention, that they are one pixel more than defined by
2496
    pay attention, that they are one pixel more than defined by
2494
    functions 0, 67.
2497
    functions 0, 67.
2495
  * On definition of scale xsize and ysize must be divisible
2498
  * On definition of scale xsize and ysize must be divisible
2496
    on 2^scale.
2499
    on 2^scale.
2497
  * Byte of data on offset 'a' must be 0/1 and defines belonging
2500
  * Byte of data on offset 'a' must be 0/1 and defines belonging
2498
    to a window of square with the side 2^scale (if scale=0,
2501
    to a window of square with the side 2^scale (if scale=0,
2499
    this is one pixel) and coordinates of the left upper corner
2502
    this is one pixel) and coordinates of the left upper corner
2500
    (a mod (xsize shr scale), a div (xsize shr scale))
2503
    (a mod (xsize shr scale), a div (xsize shr scale))
2501
  * Data size: (xsize shr scale)*(ysize shr scale).
2504
  * Data size: (xsize shr scale)*(ysize shr scale).
2502
  * Data must be presented in the memory and not change
2505
  * Data must be presented in the memory and not change
2503
    after set of shape.
2506
    after set of shape.
2504
  * The system views the shape data at every window redraw by
2507
  * The system views the shape data at every window redraw by
2505
    function 0.
2508
    function 0.
2506
  * The call of subfunction 0 with NULL pointer results in return
2509
  * The call of subfunction 0 with NULL pointer results in return
2507
    to the rectangular shape.
2510
    to the rectangular shape.
2508
 
2511
 
2509
---------------------- Constants for registers: ----------------------
2512
---------------------- Constants for registers: ----------------------
2510
  eax - SF_SET_WINDOW_SHAPE (50)
2513
  eax - SF_SET_WINDOW_SHAPE (50)
2511
======================================================================
2514
======================================================================
2512
==================== Function 51 - create thread. ====================
2515
==================== Function 51 - create thread. ====================
2513
======================================================================
2516
======================================================================
2514
Parameters:
2517
Parameters:
2515
  * eax = 51 - function number
2518
  * eax = 51 - function number
2516
  * ebx = 1 - unique subfunction
2519
  * ebx = 1 - unique subfunction
2517
  * ecx = address of thread entry point (starting eip)
2520
  * ecx = address of thread entry point (starting eip)
2518
  * edx = pointer to thread stack (starting esp)
2521
  * edx = pointer to thread stack (starting esp)
2519
Returned value:
2522
Returned value:
2520
  * eax = -1 - error (there is too many threads)
2523
  * eax = -1 - error (there is too many threads)
2521
  * otherwise eax = TID - thread identifier
2524
  * otherwise eax = TID - thread identifier
2522
 
2525
 
2523
---------------------- Constants for registers: ----------------------
2526
---------------------- Constants for registers: ----------------------
2524
  eax - SF_CREATE_THREAD (51)
2527
  eax - SF_CREATE_THREAD (51)
2525
======================================================================
2528
======================================================================
2526
==================== Function 54, subfunction 0 ======================
2529
==================== Function 54, subfunction 0 ======================
2527
============== Get the number of slots in the clipboard. =============
2530
============== Get the number of slots in the clipboard. =============
2528
======================================================================
2531
======================================================================
2529
Parameters:
2532
Parameters:
2530
  * eax = 54 - function number
2533
  * eax = 54 - function number
2531
  * ebx = 0 - subfunction number
2534
  * ebx = 0 - subfunction number
2532
Returned value:
2535
Returned value:
2533
  * eax = slots in the clipboard
2536
  * eax = slots in the clipboard
2534
  * eax = -1 - main list area not found
2537
  * eax = -1 - main list area not found
2535
 
2538
 
2536
---------------------- Constants for registers: ----------------------
2539
---------------------- Constants for registers: ----------------------
2537
  eax - SF_CLIPBOARD (54)
2540
  eax - SF_CLIPBOARD (54)
2538
  ebx - SSF_GET_SLOT_COUNT (0)
2541
  ebx - SSF_GET_SLOT_COUNT (0)
2539
======================================================================
2542
======================================================================
2540
==================== Function 54, subfunction 1 ======================
2543
==================== Function 54, subfunction 1 ======================
2541
================= Read the data from the clipboard. ==================
2544
================= Read the data from the clipboard. ==================
2542
======================================================================
2545
======================================================================
2543
Parameters:
2546
Parameters:
2544
  * eax = 54 - function number
2547
  * eax = 54 - function number
2545
  * ebx = 1 - subfunction number
2548
  * ebx = 1 - subfunction number
2546
  * eсx = slot number
2549
  * eсx = slot number
2547
Returned value:
2550
Returned value:
2548
  * eax = if successful - pointer to a memory with data
2551
  * eax = if successful - pointer to a memory with data
2549
  * eax = 1 - error
2552
  * eax = 1 - error
2550
  * eax = -1 - main list area not found
2553
  * eax = -1 - main list area not found
2551
Remarks:
2554
Remarks:
2552
  * The function must be used in conjunction with 68.11. The
2555
  * The function must be used in conjunction with 68.11. The
2553
    application must pre-initialize the local heap by calling 68.11.
2556
    application must pre-initialize the local heap by calling 68.11.
2554
 
2557
 
2555
---------------------- Constants for registers: ----------------------
2558
---------------------- Constants for registers: ----------------------
2556
  eax - SF_CLIPBOARD (54)
2559
  eax - SF_CLIPBOARD (54)
2557
  ebx - SSF_READ_CB (1)
2560
  ebx - SSF_READ_CB (1)
2558
======================================================================
2561
======================================================================
2559
==================== Function 54, subfunction 2 ======================
2562
==================== Function 54, subfunction 2 ======================
2560
================= Write the data to the clipboard. ===================
2563
================= Write the data to the clipboard. ===================
2561
======================================================================
2564
======================================================================
2562
Parameters:
2565
Parameters:
2563
  * eax = 54 - function number
2566
  * eax = 54 - function number
2564
  * ebx = 2 - subfunction number
2567
  * ebx = 2 - subfunction number
2565
  * eсx = the number of bytes to be copied
2568
  * eсx = the number of bytes to be copied
2566
  * edx = a pointer to a buffer for data to be copied
2569
  * edx = a pointer to a buffer for data to be copied
2567
Returned value:
2570
Returned value:
2568
  * eax = 0 - success
2571
  * eax = 0 - success
2569
  * eax = 1 - error
2572
  * eax = 1 - error
2570
  * eax = -1 - main list area not found
2573
  * eax = -1 - main list area not found
2571
 
2574
 
2572
---------------------- Constants for registers: ----------------------
2575
---------------------- Constants for registers: ----------------------
2573
  eax - SF_CLIPBOARD (54)
2576
  eax - SF_CLIPBOARD (54)
2574
  ebx - SSF_WRITE_CB (2)
2577
  ebx - SSF_WRITE_CB (2)
2575
======================================================================
2578
======================================================================
2576
===================== Function 54, subfunction 3 =====================
2579
===================== Function 54, subfunction 3 =====================
2577
================ Delete the last slot in the clipboard ===============
2580
================ Delete the last slot in the clipboard ===============
2578
======================================================================
2581
======================================================================
2579
Parameters:
2582
Parameters:
2580
  * eax = 54 - function number
2583
  * eax = 54 - function number
2581
  * ebx = 3 - subfunction number
2584
  * ebx = 3 - subfunction number
2582
Returned value:
2585
Returned value:
2583
  * eax = 0 - success
2586
  * eax = 0 - success
2584
  * eax = 1 - error
2587
  * eax = 1 - error
2585
  * eax = -1 - main list area not found
2588
  * eax = -1 - main list area not found
2586
 
2589
 
2587
---------------------- Constants for registers: ----------------------
2590
---------------------- Constants for registers: ----------------------
2588
  eax - SF_CLIPBOARD (54)
2591
  eax - SF_CLIPBOARD (54)
2589
  ebx - SSF_DEL_SLOT (3)
2592
  ebx - SSF_DEL_SLOT (3)
2590
======================================================================
2593
======================================================================
2591
===================== Function 54, subfunction 4 =====================
2594
===================== Function 54, subfunction 4 =====================
2592
===================== Alarm reset the lock buffer ====================
2595
===================== Alarm reset the lock buffer ====================
2593
======================================================================
2596
======================================================================
2594
Parameters:
2597
Parameters:
2595
  * eax = 54 - function number
2598
  * eax = 54 - function number
2596
  * ebx = 4 - subfunction number
2599
  * ebx = 4 - subfunction number
2597
Returned value:
2600
Returned value:
2598
  * eax = 0 - success
2601
  * eax = 0 - success
2599
  * eax = -1 - main list area not found or no blocking
2602
  * eax = -1 - main list area not found or no blocking
2600
Remarks:
2603
Remarks:
2601
  * Used in exceptional cases, where no responsible or killed
2604
  * Used in exceptional cases, where no responsible or killed
2602
    application blocked the clipboard operations.
2605
    application blocked the clipboard operations.
2603
 
2606
 
2604
---------------------- Constants for registers: ----------------------
2607
---------------------- Constants for registers: ----------------------
2605
  eax - SF_CLIPBOARD (54)
2608
  eax - SF_CLIPBOARD (54)
2606
  ebx - SSF_UNLOCK_BUFFER (4)
2609
  ebx - SSF_UNLOCK_BUFFER (4)
2607
======================================================================
2610
======================================================================
2608
 Function 55, subfunction 55 - begin to play data on built-in speaker.
2611
 Function 55, subfunction 55 - begin to play data on built-in speaker.
2609
======================================================================
2612
======================================================================
2610
Parameters:
2613
Parameters:
2611
  * eax = 55 - function number
2614
  * eax = 55 - function number
2612
  * ebx = 55 - subfunction number
2615
  * ebx = 55 - subfunction number
2613
  * esi = pointer to data
2616
  * esi = pointer to data
2614
Returned value:
2617
Returned value:
2615
  * eax = 0 - success
2618
  * eax = 0 - success
2616
  * eax = 55 - error (speaker is off or busy)
2619
  * eax = 55 - error (speaker is off or busy)
2617
Data is an array of items with variable length.
2620
Data is an array of items with variable length.
2618
Format of each item is defined by first byte:
2621
Format of each item is defined by first byte:
2619
  * 0 = end of data
2622
  * 0 = end of data
2620
  * 1..0x80 = sets sound duration on 1/100 of second; sound note
2623
  * 1..0x80 = sets sound duration on 1/100 of second; sound note
2621
    is defined by immediate value of frequency
2624
    is defined by immediate value of frequency
2622
    * following word (2 bytes) contains frequency divider;
2625
    * following word (2 bytes) contains frequency divider;
2623
      frequency is defined as 1193180/divider
2626
      frequency is defined as 1193180/divider
2624
  * 0x81 = invalid
2627
  * 0x81 = invalid
2625
  * 0x82..0xFF = note is defined by octave and number:
2628
  * 0x82..0xFF = note is defined by octave and number:
2626
    * duration in 1/100 of second = (first byte)-0x81
2629
    * duration in 1/100 of second = (first byte)-0x81
2627
    * there is one more byte;
2630
    * there is one more byte;
2628
    * (second byte)=0xFF - delay
2631
    * (second byte)=0xFF - delay
2629
    * otherwise it looks like a*0x10+b, where b=number of the note in
2632
    * otherwise it looks like a*0x10+b, where b=number of the note in
2630
      an octave from 1 to 12, a=number of octave (beginning from 0)
2633
      an octave from 1 to 12, a=number of octave (beginning from 0)
2631
Remarks:
2634
Remarks:
2632
  * Speaker play can be disabled/enabled by
2635
  * Speaker play can be disabled/enabled by
2633
    subfunction 8 of function 18.
2636
    subfunction 8 of function 18.
2634
  * Function returns control, having informed the system
2637
  * Function returns control, having informed the system
2635
    an information on request. Play itself goes independently from
2638
    an information on request. Play itself goes independently from
2636
    the program.
2639
    the program.
2637
  * The data must be kept in the memory at least up to the end
2640
  * The data must be kept in the memory at least up to the end
2638
    of play.
2641
    of play.
2639
 
2642
 
2640
---------------------- Constants for registers: ----------------------
2643
---------------------- Constants for registers: ----------------------
2641
  eax - SF_SPEAKER_PLAY (55)
2644
  eax - SF_SPEAKER_PLAY (55)
2642
======================================================================
2645
======================================================================
2643
======================= Function 57 - PCI BIOS. ======================
2646
======================= Function 57 - PCI BIOS. ======================
2644
======================================================================
2647
======================================================================
2645
Parameters:
2648
Parameters:
2646
  * eax = 57 - function number
2649
  * eax = 57 - function number
2647
  * ebp corresponds to al in PCI BIOS specification
2650
  * ebp corresponds to al in PCI BIOS specification
2648
  * other registers are set according to PCI BIOS specification
2651
  * other registers are set according to PCI BIOS specification
2649
Returned value:
2652
Returned value:
2650
  * CF is undefined
2653
  * CF is undefined
2651
  * other registers are set according to PCI BIOS specification
2654
  * other registers are set according to PCI BIOS specification
2652
Remarks:
2655
Remarks:
2653
  * Many effects of this function can be also achieved with
2656
  * Many effects of this function can be also achieved with
2654
    corresponding subfunctions of function 62.
2657
    corresponding subfunctions of function 62.
2655
  * The function calls PCI32 BIOS extension, documented e.g. in
2658
  * The function calls PCI32 BIOS extension, documented e.g. in
2656
    http://alpha1.dyns.net/files/PCI/bios21.pdf.
2659
    http://alpha1.dyns.net/files/PCI/bios21.pdf.
2657
  * If BIOS does not support this extension, its behavior is emulated
2660
  * If BIOS does not support this extension, its behavior is emulated
2658
    (through kernel-mode analogues of subfunctions of function 62).
2661
    (through kernel-mode analogues of subfunctions of function 62).
2659
 
2662
 
2660
---------------------- Constants for registers: ----------------------
2663
---------------------- Constants for registers: ----------------------
2661
  eax - SF_PCI_BIOS (57)
2664
  eax - SF_PCI_BIOS (57)
2662
======================================================================
2665
======================================================================
2663
========== Function 60 - Inter Process Communication (IPC). ==========
2666
========== Function 60 - Inter Process Communication (IPC). ==========
2664
======================================================================
2667
======================================================================
2665
IPC is used for message dispatching from one process/thread to
2668
IPC is used for message dispatching from one process/thread to
2666
another. Previously it is necessary to agree how to interpret
2669
another. Previously it is necessary to agree how to interpret
2667
the concrete message.
2670
the concrete message.
2668
 
2671
 
2669
----------- Subfunction 1 - set the area for IPC receiving -----------
2672
----------- Subfunction 1 - set the area for IPC receiving -----------
2670
Is called by process-receiver.
2673
Is called by process-receiver.
2671
Parameters:
2674
Parameters:
2672
  * eax = 60 - function number
2675
  * eax = 60 - function number
2673
  * ebx = 1 - subfunction number
2676
  * ebx = 1 - subfunction number
2674
  * ecx = pointer to the buffer
2677
  * ecx = pointer to the buffer
2675
  * edx = size of the buffer
2678
  * edx = size of the buffer
2676
Returned value:
2679
Returned value:
2677
  * eax = 0 - always success
2680
  * eax = 0 - always success
2678
Format of IPC-buffer:
2681
Format of IPC-buffer:
2679
  * +0: dword: if nonzero, buffer is considered locked;
2682
  * +0: dword: if nonzero, buffer is considered locked;
2680
    lock/unlock the buffer, when you work with it and need that
2683
    lock/unlock the buffer, when you work with it and need that
2681
    buffer data are not changed from outside (no new messages)
2684
    buffer data are not changed from outside (no new messages)
2682
  * +4: dword: occupied place in the buffer (in bytes)
2685
  * +4: dword: occupied place in the buffer (in bytes)
2683
  * +8: first message
2686
  * +8: first message
2684
  * +8+n: second message
2687
  * +8+n: second message
2685
  * ...
2688
  * ...
2686
Format of a message:
2689
Format of a message:
2687
  * +0: dword: PID of sender
2690
  * +0: dword: PID of sender
2688
  * +4: dword: message length (not including this header)
2691
  * +4: dword: message length (not including this header)
2689
  * +8: n*byte: message data
2692
  * +8: n*byte: message data
2690
 
2693
 
2691
------------------ Subfunction 2 - send IPC message ------------------
2694
------------------ Subfunction 2 - send IPC message ------------------
2692
Is called by process-sender.
2695
Is called by process-sender.
2693
Parameters:
2696
Parameters:
2694
  * eax = 60 - function number
2697
  * eax = 60 - function number
2695
  * ebx = 2 - subfunction number
2698
  * ebx = 2 - subfunction number
2696
  * ecx = PID of receiver
2699
  * ecx = PID of receiver
2697
  * edx = pointer to the message data
2700
  * edx = pointer to the message data
2698
  * esi = message length (in bytes)
2701
  * esi = message length (in bytes)
2699
Returned value:
2702
Returned value:
2700
  * eax = 0 - success
2703
  * eax = 0 - success
2701
  * eax = 1 - the receiver has not defined buffer for IPC messages
2704
  * eax = 1 - the receiver has not defined buffer for IPC messages
2702
    (can be, still have no time,
2705
    (can be, still have no time,
2703
    and can be, this is not right process)
2706
    and can be, this is not right process)
2704
  * eax = 2 - the receiver has blocked IPC-buffer; try to wait a bit
2707
  * eax = 2 - the receiver has blocked IPC-buffer; try to wait a bit
2705
  * eax = 3 - overflow of IPC-buffer of the receiver
2708
  * eax = 3 - overflow of IPC-buffer of the receiver
2706
  * eax = 4 - process/thread with such PID does not exist
2709
  * eax = 4 - process/thread with such PID does not exist
2707
Remarks:
2710
Remarks:
2708
  * Immediately after writing of IPC-message to the buffer the system
2711
  * Immediately after writing of IPC-message to the buffer the system
2709
    sends to the receiver the event with code 7 (see event codes).
2712
    sends to the receiver the event with code 7 (see event codes).
2710
 
2713
 
2711
---------------------- Constants for registers: ----------------------
2714
---------------------- Constants for registers: ----------------------
2712
  eax - SF_IPC (60)
2715
  eax - SF_IPC (60)
2713
  ebx - SSF_SET_AREA (1), SSF_SEND_MESSAGE (2)
2716
  ebx - SSF_SET_AREA (1), SSF_SEND_MESSAGE (2)
2714
======================================================================
2717
======================================================================
2715
==== Function 61 - get parameters for the direct graphics access. ====
2718
==== Function 61 - get parameters for the direct graphics access. ====
2716
======================================================================
2719
======================================================================
2717
The data of the graphics screen (the memory area which displays
2720
The data of the graphics screen (the memory area which displays
2718
screen contents) are accessible to a program directly, without
2721
screen contents) are accessible to a program directly, without
2719
any system calls, through the selector gs:
2722
any system calls, through the selector gs:
2720
        mov     eax, [gs:0]
2723
        mov     eax, [gs:0]
2721
places in eax the first dword of the buffer, which contains
2724
places in eax the first dword of the buffer, which contains
2722
information on color of the left upper point (and, possibly, colors
2725
information on color of the left upper point (and, possibly, colors
2723
of several following).
2726
of several following).
2724
        mov     [gs:0], eax
2727
        mov     [gs:0], eax
2725
by work in VESA modes with LFB sets color of the left upper point
2728
by work in VESA modes with LFB sets color of the left upper point
2726
(and, possibly, colors of several following).
2729
(and, possibly, colors of several following).
2727
To interpret the data of graphics screen program needs to know
2730
To interpret the data of graphics screen program needs to know
2728
some parameters, returning by this function.
2731
some parameters, returning by this function.
2729
Remarks:
2732
Remarks:
2730
  * Graphics parameters changes very seldom at work.
2733
  * Graphics parameters changes very seldom at work.
2731
  * At videomode change the system redraws all windows (event
2734
  * At videomode change the system redraws all windows (event
2732
    with code 1) and redraws the background (event 5).
2735
    with code 1) and redraws the background (event 5).
2733
    Same events occur in other cases too, which meet much more often,
2736
    Same events occur in other cases too, which meet much more often,
2734
    than videomode change.
2737
    than videomode change.
2735
  * By operation in videomodes with LFB the selector gs points to
2738
  * By operation in videomodes with LFB the selector gs points to
2736
    LFB itself, so reading/writing on gs result directly in
2739
    LFB itself, so reading/writing on gs result directly in
2737
    change of screen contents. By operation in videomodes without
2740
    change of screen contents. By operation in videomodes without
2738
    LFB gs points to some data area in the kernel, and all functions
2741
    LFB gs points to some data area in the kernel, and all functions
2739
    of screen output fulfil honesty double operation on writing
2742
    of screen output fulfil honesty double operation on writing
2740
    directly to the screen and writing to this buffer. In result
2743
    directly to the screen and writing to this buffer. In result
2741
    at reading contents of this buffer the results correspond to
2744
    at reading contents of this buffer the results correspond to
2742
    screen contents (with, generally speaking, large color
2745
    screen contents (with, generally speaking, large color
2743
    resolution), and writing is ignored.
2746
    resolution), and writing is ignored.
2744
    One exception is the mode 320*200, for which main loop of the
2747
    One exception is the mode 320*200, for which main loop of the
2745
    system thread updates the screen according to mouse movements.
2748
    system thread updates the screen according to mouse movements.
2746
 
2749
 
2747
------------------------- Screen resolution --------------------------
2750
------------------------- Screen resolution --------------------------
2748
Parameters:
2751
Parameters:
2749
  * eax = 61 - function number
2752
  * eax = 61 - function number
2750
  * ebx = 1 - subfunction number
2753
  * ebx = 1 - subfunction number
2751
Returned value:
2754
Returned value:
2752
  * eax = [resolution on x axis]*65536 + [resolution on y axis]
2755
  * eax = [resolution on x axis]*65536 + [resolution on y axis]
2753
Remarks:
2756
Remarks:
2754
  * One can use function 14 paying attention that
2757
  * One can use function 14 paying attention that
2755
    it returns sizes on 1 pixel less. It is fully equivalent way.
2758
    it returns sizes on 1 pixel less. It is fully equivalent way.
2756
 
2759
 
2757
---------------------- Number of bits per pixel ----------------------
2760
---------------------- Number of bits per pixel ----------------------
2758
Parameters:
2761
Parameters:
2759
  * eax = 61 - function number
2762
  * eax = 61 - function number
2760
  * ebx = 2 - subfunction number
2763
  * ebx = 2 - subfunction number
2761
Returned value:
2764
Returned value:
2762
  * eax = number of bits per pixel (24 or 32)
2765
  * eax = number of bits per pixel (24 or 32)
2763
 
2766
 
2764
-------------------- Number of bytes per scanline --------------------
2767
-------------------- Number of bytes per scanline --------------------
2765
Parameters:
2768
Parameters:
2766
  * eax = 61 - function number
2769
  * eax = 61 - function number
2767
  * ebx = 3 - subfunction number
2770
  * ebx = 3 - subfunction number
2768
Returned value:
2771
Returned value:
2769
  * eax = number of bytes occupied by one scanline
2772
  * eax = number of bytes occupied by one scanline
2770
    (horizontal line on the screen)
2773
    (horizontal line on the screen)
2771
 
2774
 
2772
---------------------- Constants for registers: ----------------------
2775
---------------------- Constants for registers: ----------------------
2773
  eax - SF_GET_GRAPHICAL_PARAMS (61)
2776
  eax - SF_GET_GRAPHICAL_PARAMS (61)
2774
  ebx - SSF_SCREEN_SIZE (1), SSF_BITS_PER_PIXEL (2),
2777
  ebx - SSF_SCREEN_SIZE (1), SSF_BITS_PER_PIXEL (2),
2775
    SSF_BYTES_PER_LINE (3)
2778
    SSF_BYTES_PER_LINE (3)
2776
======================================================================
2779
======================================================================
2777
===== Function 62, subfunction 0 - get version of PCI-interface. =====
2780
===== Function 62, subfunction 0 - get version of PCI-interface. =====
2778
======================================================================
2781
======================================================================
2779
Parameters:
2782
Parameters:
2780
  * eax = 62 - function number
2783
  * eax = 62 - function number
2781
  * bl = 0 - subfunction number
2784
  * bl = 0 - subfunction number
2782
Returned value:
2785
Returned value:
2783
  * eax = -1 - PCI access is disabled; otherwise
2786
  * eax = -1 - PCI access is disabled; otherwise
2784
  * ah.al = version of PCI-interface (ah=version, al=subversion)
2787
  * ah.al = version of PCI-interface (ah=version, al=subversion)
2785
  * high word of eax is zeroed
2788
  * high word of eax is zeroed
2786
Remarks:
2789
Remarks:
2787
  * Previously low-level access to PCI for applications must be
2790
  * Previously low-level access to PCI for applications must be
2788
    enabled by subfunction 12 of function 21.
2791
    enabled by subfunction 12 of function 21.
2789
  * If PCI BIOS is not supported, the value of ax is undefined.
2792
  * If PCI BIOS is not supported, the value of ax is undefined.
2790
 
2793
 
2791
---------------------- Constants for registers: ----------------------
2794
---------------------- Constants for registers: ----------------------
2792
  eax - SF_PCI (62)
2795
  eax - SF_PCI (62)
2793
  ebx - SSF_GET_VERSION (0)
2796
  ebx - SSF_GET_VERSION (0)
2794
======================================================================
2797
======================================================================
2795
==== Function 62, subfunction 1 - get number of the last PCI-bus. ====
2798
==== Function 62, subfunction 1 - get number of the last PCI-bus. ====
2796
======================================================================
2799
======================================================================
2797
Parameters:
2800
Parameters:
2798
  * eax = 62 - function number
2801
  * eax = 62 - function number
2799
  * bl = 1 - subfunction number
2802
  * bl = 1 - subfunction number
2800
Returned value:
2803
Returned value:
2801
  * eax = -1 - access to PCI is disabled; otherwise
2804
  * eax = -1 - access to PCI is disabled; otherwise
2802
  * al = number of the last PCI-bus; other bytes of eax are destroyed
2805
  * al = number of the last PCI-bus; other bytes of eax are destroyed
2803
Remarks:
2806
Remarks:
2804
  * Previously low-level access to PCI for applications must be
2807
  * Previously low-level access to PCI for applications must be
2805
    enabled by subfunction 12 of function 21.
2808
    enabled by subfunction 12 of function 21.
2806
  * If PCI BIOS is not supported, the value of ax is undefined.
2809
  * If PCI BIOS is not supported, the value of ax is undefined.
2807
 
2810
 
2808
---------------------- Constants for registers: ----------------------
2811
---------------------- Constants for registers: ----------------------
2809
  eax - SF_PCI (62)
2812
  eax - SF_PCI (62)
2810
  ebx - SSF_GET_LAST_BUS (1)
2813
  ebx - SSF_GET_LAST_BUS (1)
2811
======================================================================
2814
======================================================================
2812
===================== Function 62, subfunction 2 =====================
2815
===================== Function 62, subfunction 2 =====================
2813
===== Get mechanism of addressing to the PCI configuration space. ====
2816
===== Get mechanism of addressing to the PCI configuration space. ====
2814
======================================================================
2817
======================================================================
2815
Parameters:
2818
Parameters:
2816
  * eax = 62 - function number
2819
  * eax = 62 - function number
2817
  * bl = 2 - subfunction number
2820
  * bl = 2 - subfunction number
2818
Returned value:
2821
Returned value:
2819
  * eax = -1 - access to PCI is disabled; otherwise
2822
  * eax = -1 - access to PCI is disabled; otherwise
2820
  * al = mechanism (1 or 2); other bytes of eax are destroyed
2823
  * al = mechanism (1 or 2); other bytes of eax are destroyed
2821
Remarks:
2824
Remarks:
2822
  * Previously low-level access to PCI for applications must be
2825
  * Previously low-level access to PCI for applications must be
2823
    enabled by subfunction 12 of function 21.
2826
    enabled by subfunction 12 of function 21.
2824
  * Addressing mechanism is selected depending on
2827
  * Addressing mechanism is selected depending on
2825
    equipment characteristics.
2828
    equipment characteristics.
2826
  * Subfunctions of read and write work automatically
2829
  * Subfunctions of read and write work automatically
2827
    with the selected mechanism.
2830
    with the selected mechanism.
2828
 
2831
 
2829
---------------------- Constants for registers: ----------------------
2832
---------------------- Constants for registers: ----------------------
2830
  eax - SF_PCI (62)
2833
  eax - SF_PCI (62)
2831
  ebx - SSF_GET_ADRR_MODE (2)
2834
  ebx - SSF_GET_ADRR_MODE (2)
2832
======================================================================
2835
======================================================================
2833
======== Function 62, subfunctions 4,5,6 - read PCI-register. ========
2836
======== Function 62, subfunctions 4,5,6 - read PCI-register. ========
2834
======================================================================
2837
======================================================================
2835
Parameters:
2838
Parameters:
2836
  * eax = 62 - function number
2839
  * eax = 62 - function number
2837
  * bl = 4 - read byte
2840
  * bl = 4 - read byte
2838
  * bl = 5 - read word
2841
  * bl = 5 - read word
2839
  * bl = 6 - read dword
2842
  * bl = 6 - read dword
2840
  * bh = number of PCI-bus
2843
  * bh = number of PCI-bus
2841
  * ch = dddddfff, where ddddd = number of the device on the bus,
2844
  * ch = dddddfff, where ddddd = number of the device on the bus,
2842
    fff = function number of device
2845
    fff = function number of device
2843
  * cl = number of register (must be even for bl=5,
2846
  * cl = number of register (must be even for bl=5,
2844
    divisible by 4 for bl=6)
2847
    divisible by 4 for bl=6)
2845
Returned value:
2848
Returned value:
2846
  * eax = -1 - error (access to PCI is disabled or parameters
2849
  * eax = -1 - error (access to PCI is disabled or parameters
2847
    are not supported); otherwise
2850
    are not supported); otherwise
2848
  * al/ax/eax (depending on requested size) contains the data;
2851
  * al/ax/eax (depending on requested size) contains the data;
2849
    the other part of register eax is destroyed
2852
    the other part of register eax is destroyed
2850
Remarks:
2853
Remarks:
2851
  * Previously low-level access to PCI for applications must be
2854
  * Previously low-level access to PCI for applications must be
2852
    enabled by subfunction 12 of function 21.
2855
    enabled by subfunction 12 of function 21.
2853
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2856
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2854
    function number. To get access mechanism use subfunction 2.
2857
    function number. To get access mechanism use subfunction 2.
2855
  * Some registers are standard and exist for all devices, some are
2858
  * Some registers are standard and exist for all devices, some are
2856
    defined by the concrete device. The list of registers of the
2859
    defined by the concrete device. The list of registers of the
2857
    first type can be found e.g. in famous
2860
    first type can be found e.g. in famous
2858
    Interrupt List by Ralf Brown
2861
    Interrupt List by Ralf Brown
2859
    (http://www.pobox.com/~ralf/files.html,
2862
    (http://www.pobox.com/~ralf/files.html,
2860
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
2863
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
2861
    registers of the second type must be listed
2864
    registers of the second type must be listed
2862
    in the device documentation.
2865
    in the device documentation.
2863
 
2866
 
2864
---------------------- Constants for registers: ----------------------
2867
---------------------- Constants for registers: ----------------------
2865
  eax - SF_PCI (62)
2868
  eax - SF_PCI (62)
2866
  ebx - SSF_READ_BYTE (4), SSF_READ_WORD (5), SSF_READ_DWORD (6)
2869
  ebx - SSF_READ_BYTE (4), SSF_READ_WORD (5), SSF_READ_DWORD (6)
2867
======================================================================
2870
======================================================================
2868
====== Function 62, subfunctions 8,9,10 - write to PCI-register. =====
2871
====== Function 62, subfunctions 8,9,10 - write to PCI-register. =====
2869
======================================================================
2872
======================================================================
2870
Parameters:
2873
Parameters:
2871
  * eax = 62 - function number
2874
  * eax = 62 - function number
2872
  * bl = 8 - write byte
2875
  * bl = 8 - write byte
2873
  * bl = 9 - write word
2876
  * bl = 9 - write word
2874
  * bl = 10 - write dword
2877
  * bl = 10 - write dword
2875
  * bh = number of PCI-bus
2878
  * bh = number of PCI-bus
2876
  * ch = dddddfff, where ddddd = number of the device on the bus,
2879
  * ch = dddddfff, where ddddd = number of the device on the bus,
2877
    fff = function number of device
2880
    fff = function number of device
2878
  * cl = number of register (must be even for bl=9,
2881
  * cl = number of register (must be even for bl=9,
2879
    divisible by 4 for bl=10)
2882
    divisible by 4 for bl=10)
2880
  * dl/dx/edx (depending on requested size) contains
2883
  * dl/dx/edx (depending on requested size) contains
2881
    the data to write
2884
    the data to write
2882
Returned value:
2885
Returned value:
2883
  * eax = -1 - error (access to PCI is disabled or parameters
2886
  * eax = -1 - error (access to PCI is disabled or parameters
2884
    are not supported)
2887
    are not supported)
2885
  * eax = 0 - success
2888
  * eax = 0 - success
2886
Remarks:
2889
Remarks:
2887
  * Previously low-level access to PCI for applications must be
2890
  * Previously low-level access to PCI for applications must be
2888
    enabled by subfunction 12 of function 21.
2891
    enabled by subfunction 12 of function 21.
2889
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2892
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2890
    function number. To get access mechanism use subfunction 2.
2893
    function number. To get access mechanism use subfunction 2.
2891
  * Some registers are standard and exist for all devices, some are
2894
  * Some registers are standard and exist for all devices, some are
2892
    defined by the concrete device. The list of registers of the
2895
    defined by the concrete device. The list of registers of the
2893
    first type can be found e.g. in famous Interrupt List by
2896
    first type can be found e.g. in famous Interrupt List by
2894
    Ralf Brown; registers of the second type must be listed
2897
    Ralf Brown; registers of the second type must be listed
2895
    in the device documentation.
2898
    in the device documentation.
2896
 
2899
 
2897
---------------------- Constants for registers: ----------------------
2900
---------------------- Constants for registers: ----------------------
2898
  eax - SF_PCI (62)
2901
  eax - SF_PCI (62)
2899
  ebx - SSF_WRITE_BYTE (8), SSF_WRITE_WORD (9), SSF_WRITE_DWORD (10)
2902
  ebx - SSF_WRITE_BYTE (8), SSF_WRITE_WORD (9), SSF_WRITE_DWORD (10)
2900
======================================================================
2903
======================================================================
2901
============== Function 63 - work with the debug board. ==============
2904
============== Function 63 - work with the debug board. ==============
2902
======================================================================
2905
======================================================================
2903
The debug board is the global system buffer (with the size
2906
The debug board is the global system buffer (with the size
2904
1024 bytes), to which any program can write (generally speaking,
2907
1024 bytes), to which any program can write (generally speaking,
2905
arbitrary) data and from which other program can read these data.
2908
arbitrary) data and from which other program can read these data.
2906
By the agreement written data are text strings interpreted as
2909
By the agreement written data are text strings interpreted as
2907
debug messages on a course of program execution. The kernel in
2910
debug messages on a course of program execution. The kernel in
2908
some situations also writes to the debug board information on
2911
some situations also writes to the debug board information on
2909
execution of some functions; by the agreement kernel messages
2912
execution of some functions; by the agreement kernel messages
2910
begins from the prefix "K : ".
2913
begins from the prefix "K : ".
2911
For view of the debug board the application 'board' was created,
2914
For view of the debug board the application 'board' was created,
2912
which reads data from the buffer and displays them in its window.
2915
which reads data from the buffer and displays them in its window.
2913
'board' interpretes the sequence of codes 13,10 as newline.
2916
'board' interpretes the sequence of codes 13,10 as newline.
2914
A character with null code in an end of line is not necessary,
2917
A character with null code in an end of line is not necessary,
2915
but also does not prevent.
2918
but also does not prevent.
2916
Because debugger has been written, the value of the debug board
2919
Because debugger has been written, the value of the debug board
2917
has decreased, as debugger allows to inspect completely a course of
2920
has decreased, as debugger allows to inspect completely a course of
2918
program execution without any efforts from the direction of program
2921
program execution without any efforts from the direction of program
2919
itself. Nevertheless in some cases the debug board is still useful.
2922
itself. Nevertheless in some cases the debug board is still useful.
2920
 
2923
 
2921
----------------------------- Write byte -----------------------------
2924
----------------------------- Write byte -----------------------------
2922
Parameters:
2925
Parameters:
2923
  * eax = 63 - function number
2926
  * eax = 63 - function number
2924
  * ebx = 1 - subfunction number
2927
  * ebx = 1 - subfunction number
2925
  * cl = data byte
2928
  * cl = data byte
2926
Returned value:
2929
Returned value:
2927
  * function does not return value
2930
  * function does not return value
2928
Remarks:
2931
Remarks:
2929
  * Byte is written to the buffer. Buffer size is 512 bytes.
2932
  * Byte is written to the buffer. Buffer size is 512 bytes.
2930
    At buffer overflow all obtained data are lost.
2933
    At buffer overflow all obtained data are lost.
2931
  * For output to the debug board of more complicated objects
2934
  * For output to the debug board of more complicated objects
2932
    (strings, numbers) it is enough to call this function in cycle.
2935
    (strings, numbers) it is enough to call this function in cycle.
2933
    It is possible not to write the appropriate code manually and use
2936
    It is possible not to write the appropriate code manually and use
2934
    file 'debug.inc', which is included into the distributive.
2937
    file 'debug.inc', which is included into the distributive.
2935
 
2938
 
2936
----------------------------- Read byte ------------------------------
2939
----------------------------- Read byte ------------------------------
2937
Takes away byte from the buffer.
2940
Takes away byte from the buffer.
2938
Parameters:
2941
Parameters:
2939
  * eax = 63 - function number
2942
  * eax = 63 - function number
2940
  * ebx = 2 - subfunction number
2943
  * ebx = 2 - subfunction number
2941
Returned value:
2944
Returned value:
2942
  * eax = ebx = 0 - the buffer is empty
2945
  * eax = ebx = 0 - the buffer is empty
2943
  * eax = byte, ebx = 1 - byte was successfully read
2946
  * eax = byte, ebx = 1 - byte was successfully read
2944
 
2947
 
2945
---------------------- Constants for registers: ----------------------
2948
---------------------- Constants for registers: ----------------------
2946
  eax - SF_BOARD (63)
2949
  eax - SF_BOARD (63)
2947
  ebx - SSF_DEBUG_WRITE (1), SSF_DEBUG_READ (2)
2950
  ebx - SSF_DEBUG_WRITE (1), SSF_DEBUG_READ (2)
2948
======================================================================
2951
======================================================================
2949
============== Function 64 - resize application memory. ==============
2952
============== Function 64 - resize application memory. ==============
2950
======================================================================
2953
======================================================================
2951
Parameters:
2954
Parameters:
2952
  * eax = 64 - function number
2955
  * eax = 64 - function number
2953
  * ebx = 1 - unique subfunction
2956
  * ebx = 1 - unique subfunction
2954
  * ecx = new memory size
2957
  * ecx = new memory size
2955
Returned value:
2958
Returned value:
2956
  * eax = 0 - success
2959
  * eax = 0 - success
2957
  * eax = 1 - not enough memory
2960
  * eax = 1 - not enough memory
2958
Remarks:
2961
Remarks:
2959
  * There is another way to dynamically allocate/free memory -
2962
  * There is another way to dynamically allocate/free memory -
2960
    subfunctions 12, 13 and 20 of function 68, but after creation
2963
    subfunctions 12, 13 and 20 of function 68, but after creation
2961
    of the process heap 64 function call will be ignored.
2964
    of the process heap 64 function call will be ignored.
2962
  * The function cannot be used together with 68.11, 68.12, 68.13.
2965
  * The function cannot be used together with 68.11, 68.12, 68.13.
2963
    The function call will be ignored after creation of process heap
2966
    The function call will be ignored after creation of process heap
2964
    with function 68.11.
2967
    with function 68.11.
2965
        
2968
        
2966
---------------------- Constants for registers: ----------------------
2969
---------------------- Constants for registers: ----------------------
2967
  eax - SF_MEMORY_RESIZE (64)
2970
  eax - SF_MEMORY_RESIZE (64)
2968
======================================================================
2971
======================================================================
2969
======== Function 65 - draw image with palette in the window. ========
2972
======== Function 65 - draw image with palette in the window. ========
2970
======================================================================
2973
======================================================================
2971
Parameters:
2974
Parameters:
2972
  * eax = 65 - function number
2975
  * eax = 65 - function number
2973
  * ebx = pointer to the image
2976
  * ebx = pointer to the image
2974
  * ecx = [size on axis x]*65536 + [size on axis y]
2977
  * ecx = [size on axis x]*65536 + [size on axis y]
2975
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2978
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2976
  * esi = number of bits per pixel, must be 1,2,4,8,9,15,16,24 or 32;
2979
  * esi = number of bits per pixel, must be 1,2,4,8,9,15,16,24 or 32;
2977
  * edi = pointer to palette (2 to the power esi colors 0x00RRGGBB);
2980
  * edi = pointer to palette (2 to the power esi colors 0x00RRGGBB);
2978
          ignored when esi > 8
2981
          ignored when esi > 8
2979
  * ebp = offset of next row data relative to previous row data
2982
  * ebp = offset of next row data relative to previous row data
2980
Returned value:
2983
Returned value:
2981
  * function does not return value
2984
  * function does not return value
2982
Remarks:
2985
Remarks:
2983
  * Coordinates of the image are coordinates of the upper left corner
2986
  * Coordinates of the image are coordinates of the upper left corner
2984
    of the image relative to the window.
2987
    of the image relative to the window.
2985
  * Format of image with 1 bit per pixel: each byte of image
2988
  * Format of image with 1 bit per pixel: each byte of image
2986
    (possibly excluding last bytes in rows), contains information on
2989
    (possibly excluding last bytes in rows), contains information on
2987
    the color of 8 pixels, MSB corresponds to first pixel.
2990
    the color of 8 pixels, MSB corresponds to first pixel.
2988
  * Format of image with 2 bits per pixel: each byte of image
2991
  * Format of image with 2 bits per pixel: each byte of image
2989
    (possibly excluding last bytes in rows), contains information on
2992
    (possibly excluding last bytes in rows), contains information on
2990
    the color of 4 pixels, two MSBs correspond to first pixel.
2993
    the color of 4 pixels, two MSBs correspond to first pixel.
2991
  * Format of image with 4 bits per pixel: each byte of image
2994
  * Format of image with 4 bits per pixel: each byte of image
2992
    excluding last bytes in rows (if width is odd) contains
2995
    excluding last bytes in rows (if width is odd) contains
2993
    information on the color of 2 pixels, high-order tetrad
2996
    information on the color of 2 pixels, high-order tetrad
2994
    corresponds to first pixel.
2997
    corresponds to first pixel.
2995
  * Format of image with 8 bits per pixel: each byte of image is
2998
  * Format of image with 8 bits per pixel: each byte of image is
2996
    index in the palette.
2999
    index in the palette.
2997
  * Format of image with 9 bits per pixel: array of one byte values;
3000
  * Format of image with 9 bits per pixel: array of one byte values;
2998
    each byte (8 bit) represents the intensity of gray for one pixel;
3001
    each byte (8 bit) represents the intensity of gray for one pixel;
2999
    this format is equal to 8bpp without palette.
3002
    this format is equal to 8bpp without palette.
3000
  * Format of image with 15 bits per pixel: the color of each pixel
3003
  * Format of image with 15 bits per pixel: the color of each pixel
3001
    is coded as (bit representation) 0RRRRRGGGGGBBBBB - 5 bits per
3004
    is coded as (bit representation) 0RRRRRGGGGGBBBBB - 5 bits per
3002
    each color.
3005
    each color.
3003
  * Format of image with 16 bits per pixel: the color of each pixel
3006
  * Format of image with 16 bits per pixel: the color of each pixel
3004
    is coded as RRRRRGGGGGGBBBBB (5+6+5).
3007
    is coded as RRRRRGGGGGGBBBBB (5+6+5).
3005
  * Format of image with 24 bits per pixel: the color of each pixel
3008
  * Format of image with 24 bits per pixel: the color of each pixel
3006
    is coded as 3 bytes - sequentially blue, green, red components.
3009
    is coded as 3 bytes - sequentially blue, green, red components.
3007
  * Format of image with 32 bits per pixel: similar to 24, but
3010
  * Format of image with 32 bits per pixel: similar to 24, but
3008
    one additional ignored byte is present. It's format is BGRX,
3011
    one additional ignored byte is present. It's format is BGRX,
3009
    where X is the ignored byte.
3012
    where X is the ignored byte.
3010
  * The call to function 7 is equivalent to call to this function
3013
  * The call to function 7 is equivalent to call to this function
3011
    with esi=24, ebp=0.
3014
    with esi=24, ebp=0.
3012
 
3015
 
3013
---------------------- Constants for registers: ----------------------
3016
---------------------- Constants for registers: ----------------------
3014
  eax - SF_PUT_IMAGE_EXT (65)
3017
  eax - SF_PUT_IMAGE_EXT (65)
3015
======================================================================
3018
======================================================================
3016
================== Function 66 - work with keyboard. =================
3019
================== Function 66 - work with keyboard. =================
3017
======================================================================
3020
======================================================================
3018
The input mode influences results of reading keys by function 2.
3021
The input mode influences results of reading keys by function 2.
3019
When a program loads, ASCII input mode is set for it.
3022
When a program loads, ASCII input mode is set for it.
3020
 
3023
 
3021
-------------- Subfunction 1 - set keyboard input mode. --------------
3024
-------------- Subfunction 1 - set keyboard input mode. --------------
3022
Parameters:
3025
Parameters:
3023
  * eax = 66 - function number
3026
  * eax = 66 - function number
3024
  * ebx = 1 - subfunction number
3027
  * ebx = 1 - subfunction number
3025
  * ecx = mode:
3028
  * ecx = mode:
3026
    * 0 = normal (ASCII-characters)
3029
    * 0 = normal (ASCII-characters)
3027
    * 1 = scancodes
3030
    * 1 = scancodes
3028
Returned value:
3031
Returned value:
3029
  * function does not return value
3032
  * function does not return value
3030
 
3033
 
3031
-------------- Subfunction 2 - get keyboard input mode. --------------
3034
-------------- Subfunction 2 - get keyboard input mode. --------------
3032
Parameters:
3035
Parameters:
3033
  * eax = 66 - function number
3036
  * eax = 66 - function number
3034
  * ebx = 2 - subfunction number
3037
  * ebx = 2 - subfunction number
3035
Returned value:
3038
Returned value:
3036
  * eax = current mode
3039
  * eax = current mode
3037
 
3040
 
3038
------------ Subfunction 3 - get status of control keys. -------------
3041
------------ Subfunction 3 - get status of control keys. -------------
3039
Parameters:
3042
Parameters:
3040
  * eax = 66 - function number
3043
  * eax = 66 - function number
3041
  * ebx = 3 - subfunction number
3044
  * ebx = 3 - subfunction number
3042
Returned value:
3045
Returned value:
3043
  * eax = bit mask:
3046
  * eax = bit mask:
3044
  * bit 0  (mask 1): left Shift is pressed
3047
  * bit 0  (mask 1): left Shift is pressed
3045
  * bit 1  (mask 2): right Shift is pressed
3048
  * bit 1  (mask 2): right Shift is pressed
3046
  * bit 2  (mask 4): left Ctrl is pressed
3049
  * bit 2  (mask 4): left Ctrl is pressed
3047
  * bit 3  (mask 8): right Ctrl is pressed
3050
  * bit 3  (mask 8): right Ctrl is pressed
3048
  * bit 4  (mask 0x10): left Alt is pressed
3051
  * bit 4  (mask 0x10): left Alt is pressed
3049
  * bit 5  (mask 0x20): right Alt is pressed
3052
  * bit 5  (mask 0x20): right Alt is pressed
3050
  * bit 6  (mask 0x40): CapsLock is on
3053
  * bit 6  (mask 0x40): CapsLock is on
3051
  * bit 7  (mask 0x80): NumLock is on
3054
  * bit 7  (mask 0x80): NumLock is on
3052
  * bit 8  (mask 0x100): ScrollLock is on
3055
  * bit 8  (mask 0x100): ScrollLock is on
3053
  * bit 9  (mask 0x200): left Win is pressed
3056
  * bit 9  (mask 0x200): left Win is pressed
3054
  * bit 10 (mask 0x400): right Win is pressed
3057
  * bit 10 (mask 0x400): right Win is pressed
3055
  * other bits are cleared
3058
  * other bits are cleared
3056
 
3059
 
3057
-------------- Subfunction 4 - set system-wide hotkey. ---------------
3060
-------------- Subfunction 4 - set system-wide hotkey. ---------------
3058
When hotkey is pressed, the system notifies only those applications,
3061
When hotkey is pressed, the system notifies only those applications,
3059
which have installed it; the active application (which receives
3062
which have installed it; the active application (which receives
3060
all normal input) does not receive such keys.
3063
all normal input) does not receive such keys.
3061
The notification consists in sending event with the code 2.
3064
The notification consists in sending event with the code 2.
3062
Reading hotkey is the same as reading normal key - by function 2.
3065
Reading hotkey is the same as reading normal key - by function 2.
3063
Parameters:
3066
Parameters:
3064
  * eax = 66 - function number
3067
  * eax = 66 - function number
3065
  * ebx = 4 - subfunction number
3068
  * ebx = 4 - subfunction number
3066
  * cl determines key scancode;
3069
  * cl determines key scancode;
3067
    use cl=0 to give combinations such as Ctrl+Shift
3070
    use cl=0 to give combinations such as Ctrl+Shift
3068
  * edx = 0xXYZ determines possible states of control keys:
3071
  * edx = 0xXYZ determines possible states of control keys:
3069
    * Z (low 4 bits) determines state of LShift and RShift:
3072
    * Z (low 4 bits) determines state of LShift and RShift:
3070
      * 0 = no key must be pressed;
3073
      * 0 = no key must be pressed;
3071
      * 1 = exactly one key must be pressed;
3074
      * 1 = exactly one key must be pressed;
3072
      * 2 = both keys must be pressed;
3075
      * 2 = both keys must be pressed;
3073
      * 3 = must be pressed LShift, but not RShift;
3076
      * 3 = must be pressed LShift, but not RShift;
3074
      * 4 = must be pressed RShift, but not LShift
3077
      * 4 = must be pressed RShift, but not LShift
3075
    * Y - similar for LCtrl and RCtrl;
3078
    * Y - similar for LCtrl and RCtrl;
3076
    * X - similar for LAlt and RAlt
3079
    * X - similar for LAlt and RAlt
3077
Returned value:
3080
Returned value:
3078
  * eax=0 - success
3081
  * eax=0 - success
3079
  * eax=1 - too many hotkeys (maximum 256 are allowed)
3082
  * eax=1 - too many hotkeys (maximum 256 are allowed)
3080
Remarks:
3083
Remarks:
3081
  * Hotkey can work either at pressing or at release. Release
3084
  * Hotkey can work either at pressing or at release. Release
3082
    scancode of a key is more on 128 than pressing scancode
3085
    scancode of a key is more on 128 than pressing scancode
3083
    (i.e. high bit is set).
3086
    (i.e. high bit is set).
3084
  * Several applications can set the same combination;
3087
  * Several applications can set the same combination;
3085
    all such applications will be informed on pressing
3088
    all such applications will be informed on pressing
3086
    such combination.
3089
    such combination.
3087
 
3090
 
3088
-------------- Subfunction 5 - delete installed hotkey. --------------
3091
-------------- Subfunction 5 - delete installed hotkey. --------------
3089
Parameters:
3092
Parameters:
3090
  * eax = 66 - function number
3093
  * eax = 66 - function number
3091
  * ebx = 5 - subfunction number
3094
  * ebx = 5 - subfunction number
3092
  * cl = scancode of key and edx = 0xXYZ the same as in subfunction 4
3095
  * cl = scancode of key and edx = 0xXYZ the same as in subfunction 4
3093
Returned value:
3096
Returned value:
3094
  * eax = 0 - success
3097
  * eax = 0 - success
3095
  * eax = 1 - there is no such hotkey
3098
  * eax = 1 - there is no such hotkey
3096
Remarks:
3099
Remarks:
3097
  * When a process/thread terminates, all hotkey installed by it are
3100
  * When a process/thread terminates, all hotkey installed by it are
3098
    deleted.
3101
    deleted.
3099
  * The call to this subfunction does not affect other applications.
3102
  * The call to this subfunction does not affect other applications.
3100
    If other application has defined the same combination, it will
3103
    If other application has defined the same combination, it will
3101
    still receive notices.
3104
    still receive notices.
3102
 
3105
 
3103
--------------- Subfunction 6 - block the normal input. --------------
3106
--------------- Subfunction 6 - block the normal input. --------------
3104
Parameters:
3107
Parameters:
3105
  * eax = 66 - function number
3108
  * eax = 66 - function number
3106
  * ebx = 6 - subfunction number
3109
  * ebx = 6 - subfunction number
3107
Returned value:
3110
Returned value:
3108
  * function does not return value
3111
  * function does not return value
3109
Remarks:
3112
Remarks:
3110
  * Blocking the normal keyboard input for installed hotkeys
3113
  * Blocking the normal keyboard input for installed hotkeys
3111
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3114
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3112
 
3115
 
3113
------------ Subfunction 7 - unlock the normal input. ----------------
3116
------------ Subfunction 7 - unlock the normal input. ----------------
3114
Parameters:
3117
Parameters:
3115
  * eax = 66 - function number
3118
  * eax = 66 - function number
3116
  * ebx = 7 - subfunction number
3119
  * ebx = 7 - subfunction number
3117
Returned value:
3120
Returned value:
3118
  * function does not return value
3121
  * function does not return value
3119
Remarks:
3122
Remarks:
3120
  * Unlocking the results of the f. 66.6
3123
  * Unlocking the results of the f. 66.6
3121
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3124
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3122
 
3125
 
3123
---------------------- Constants for registers: ----------------------
3126
---------------------- Constants for registers: ----------------------
3124
  eax - SF_KEYBOARD (66)
3127
  eax - SF_KEYBOARD (66)
3125
  ebx - SSF_SET_INPUT_MODE (1), SSF_GET_INPUT_MODE (2),
3128
  ebx - SSF_SET_INPUT_MODE (1), SSF_GET_INPUT_MODE (2),
3126
    SSF_GET_CONTROL_KEYS (3), SSF_SET_SYS_HOTKEY (4),
3129
    SSF_GET_CONTROL_KEYS (3), SSF_SET_SYS_HOTKEY (4),
3127
    SSF_DEL_SYS_HOTKEY (5),  SSF_LOCK_INPUT (6), SSF_UNLOCK_INPUT (7)
3130
    SSF_DEL_SYS_HOTKEY (5),  SSF_LOCK_INPUT (6), SSF_UNLOCK_INPUT (7)
3128
======================================================================
3131
======================================================================
3129
========= Function 67 - change position/sizes of the window. =========
3132
========= Function 67 - change position/sizes of the window. =========
3130
======================================================================
3133
======================================================================
3131
Parameters:
3134
Parameters:
3132
  * eax = 67 - function number
3135
  * eax = 67 - function number
3133
  * ebx = new x-coordinate of the window
3136
  * ebx = new x-coordinate of the window
3134
  * ecx = new y-coordinate of the window
3137
  * ecx = new y-coordinate of the window
3135
  * edx = new x-size of the window
3138
  * edx = new x-size of the window
3136
  * esi = new y-size of the window
3139
  * esi = new y-size of the window
3137
Returned value:
3140
Returned value:
3138
  * function does not return value
3141
  * function does not return value
3139
Remarks:
3142
Remarks:
3140
  * The value -1 for a parameter means "do not change"; e.g. to move
3143
  * The value -1 for a parameter means "do not change"; e.g. to move
3141
    the window without resizing it is possible to specify edx=esi=-1.
3144
    the window without resizing it is possible to specify edx=esi=-1.
3142
  * Previously the window must be defined by function 0.
3145
  * Previously the window must be defined by function 0.
3143
    It sets initial coordinates and sizes of the window.
3146
    It sets initial coordinates and sizes of the window.
3144
  * Sizes of the window are understood in sense of function 0,
3147
  * Sizes of the window are understood in sense of function 0,
3145
    that is one pixel less than real sizes.
3148
    that is one pixel less than real sizes.
3146
  * The function call for maximized windows is simply ignored.
3149
  * The function call for maximized windows is simply ignored.
3147
  * For windows of appropriate styles position and/or sizes can be
3150
  * For windows of appropriate styles position and/or sizes can be
3148
    changed by user; current position and sizes can be obtained by
3151
    changed by user; current position and sizes can be obtained by
3149
    call to function 9.
3152
    call to function 9.
3150
  * The function sends to the window redraw event (with the code 1).
3153
  * The function sends to the window redraw event (with the code 1).
3151
 
3154
 
3152
---------------------- Constants for registers: ----------------------
3155
---------------------- Constants for registers: ----------------------
3153
  eax - SF_CHANGE_WINDOW (67)
3156
  eax - SF_CHANGE_WINDOW (67)
3154
======================================================================
3157
======================================================================
3155
====== Function 68, subfunction 0 - get the task switch counter. =====
3158
====== Function 68, subfunction 0 - get the task switch counter. =====
3156
======================================================================
3159
======================================================================
3157
Parameters:
3160
Parameters:
3158
  * eax = 68 - function number
3161
  * eax = 68 - function number
3159
  * ebx = 0 - subfunction number
3162
  * ebx = 0 - subfunction number
3160
Returned value:
3163
Returned value:
3161
  * eax = number of task switches from the system booting
3164
  * eax = number of task switches from the system booting
3162
    (modulo 2^32)
3165
    (modulo 2^32)
3163
 
3166
 
3164
---------------------- Constants for registers: ----------------------
3167
---------------------- Constants for registers: ----------------------
3165
  eax - SF_SYS_MISC (68)
3168
  eax - SF_SYS_MISC (68)
3166
  ebx - SSF_GET_TASK_SWITCH_COUNT (0)
3169
  ebx - SSF_GET_TASK_SWITCH_COUNT (0)
3167
======================================================================
3170
======================================================================
3168
======= Function 68, subfunction 1 - switch to the next thread. ======
3171
======= Function 68, subfunction 1 - switch to the next thread. ======
3169
======================================================================
3172
======================================================================
3170
The function completes the current time slice allocated to the
3173
The function completes the current time slice allocated to the
3171
thread and switches to the next. (Which thread in which process
3174
thread and switches to the next. (Which thread in which process
3172
will be next, is unpredictable). Later, when execution queue
3175
will be next, is unpredictable). Later, when execution queue
3173
will reach the current thread, execution will be continued.
3176
will reach the current thread, execution will be continued.
3174
Parameters:
3177
Parameters:
3175
  * eax = 68 - function number
3178
  * eax = 68 - function number
3176
  * ebx = 1 - subfunction number
3179
  * ebx = 1 - subfunction number
3177
Returned value:
3180
Returned value:
3178
  * function does not return value
3181
  * function does not return value
3179
 
3182
 
3180
---------------------- Constants for registers: ----------------------
3183
---------------------- Constants for registers: ----------------------
3181
  eax - SF_SYS_MISC (68)
3184
  eax - SF_SYS_MISC (68)
3182
  ebx - SSF_SWITCH_TASK (1)
3185
  ebx - SSF_SWITCH_TASK (1)
3183
======================================================================
3186
======================================================================
3184
============= Function 68, subfunction 2 - cache + rdpmc. ============
3187
============= Function 68, subfunction 2 - cache + rdpmc. ============
3185
======================================================================
3188
======================================================================
3186
Parameters:
3189
Parameters:
3187
  * eax = 68 - function number
3190
  * eax = 68 - function number
3188
  * ebx = 2 - subfunction number
3191
  * ebx = 2 - subfunction number
3189
  * ecx = required action:
3192
  * ecx = required action:
3190
    * ecx = 0 - enable instruction 'rdpmc'
3193
    * ecx = 0 - enable instruction 'rdpmc'
3191
      (ReaD Performance-Monitoring Counters) for applications
3194
      (ReaD Performance-Monitoring Counters) for applications
3192
    * ecx = 1 - find out whether cache is disabled/enabled
3195
    * ecx = 1 - find out whether cache is disabled/enabled
3193
    * ecx = 2 - enable cache
3196
    * ecx = 2 - enable cache
3194
    * ecx = 3 - disable cache
3197
    * ecx = 3 - disable cache
3195
Returned value:
3198
Returned value:
3196
  * for ecx=0:
3199
  * for ecx=0:
3197
    * eax = the value of cr4
3200
    * eax = the value of cr4
3198
  * for ecx=1:
3201
  * for ecx=1:
3199
    * eax = (cr0 and 0x60000000):
3202
    * eax = (cr0 and 0x60000000):
3200
    * eax = 0 - cache is on
3203
    * eax = 0 - cache is on
3201
    * eax <> 0 - cache is off
3204
    * eax <> 0 - cache is off
3202
  * for ecx=2 and ecx=3:
3205
  * for ecx=2 and ecx=3:
3203
    * function does not return value
3206
    * function does not return value
3204
 
3207
 
3205
---------------------- Constants for registers: ----------------------
3208
---------------------- Constants for registers: ----------------------
3206
  eax - SF_SYS_MISC (68)
3209
  eax - SF_SYS_MISC (68)
3207
  ebx - SSF_PERFORMANCE (2)
3210
  ebx - SSF_PERFORMANCE (2)
3208
  ecx - SSSF_ALLOW_RDPMC (0), SSSF_CACHE_STATUS (1),
3211
  ecx - SSSF_ALLOW_RDPMC (0), SSSF_CACHE_STATUS (1),
3209
    SSSF_CACHE_ON (2), SSSF_CACHE_OFF (3)
3212
    SSSF_CACHE_ON (2), SSSF_CACHE_OFF (3)
3210
======================================================================
3213
======================================================================
3211
=========== Function 68, subfunction 3 - read MSR-register. ==========
3214
=========== Function 68, subfunction 3 - read MSR-register. ==========
3212
======================================================================
3215
======================================================================
3213
MSR = Model Specific Register; the complete list of MSR-registers
3216
MSR = Model Specific Register; the complete list of MSR-registers
3214
of a processor is included to the documentation on it (for example,
3217
of a processor is included to the documentation on it (for example,
3215
IA-32 Intel Architecture Software Developer's Manual,
3218
IA-32 Intel Architecture Software Developer's Manual,
3216
Volume 3, Appendix B); each processor family has its own subset
3219
Volume 3, Appendix B); each processor family has its own subset
3217
of the MSR-registers.
3220
of the MSR-registers.
3218
Parameters:
3221
Parameters:
3219
  * eax = 68 - function number
3222
  * eax = 68 - function number
3220
  * ebx = 3 - subfunction number
3223
  * ebx = 3 - subfunction number
3221
  * ecx is ignored
3224
  * ecx is ignored
3222
  * edx = MSR address
3225
  * edx = MSR address
3223
Returned value:
3226
Returned value:
3224
  * ebx:eax = high:low dword of the result
3227
  * ebx:eax = high:low dword of the result
3225
Remarks:
3228
Remarks:
3226
  * If ecx contains nonexistent or not implemented for this processor
3229
  * If ecx contains nonexistent or not implemented for this processor
3227
    MSR, processor will generate an exception in the kernel, which
3230
    MSR, processor will generate an exception in the kernel, which
3228
    will kill the thread.
3231
    will kill the thread.
3229
  * Previously it is necessary to check, whether MSRs are supported
3232
  * Previously it is necessary to check, whether MSRs are supported
3230
    as a whole, with the instruction 'cpuid'. Otherwise processor
3233
    as a whole, with the instruction 'cpuid'. Otherwise processor
3231
    will generate other exception in the kernel, which will anyway
3234
    will generate other exception in the kernel, which will anyway
3232
    kill the thread.
3235
    kill the thread.
3233
 
3236
 
3234
---------------------- Constants for registers: ----------------------
3237
---------------------- Constants for registers: ----------------------
3235
  eax - SF_SYS_MISC (68)
3238
  eax - SF_SYS_MISC (68)
3236
  ebx - SSF_READ_MSR (3)
3239
  ebx - SSF_READ_MSR (3)
3237
======================================================================
3240
======================================================================
3238
========= Function 68, subfunction 4 - write to MSR-register. ========
3241
========= Function 68, subfunction 4 - write to MSR-register. ========
3239
======================================================================
3242
======================================================================
3240
MSR = Model Specific Register; the complete list of MSR-registers
3243
MSR = Model Specific Register; the complete list of MSR-registers
3241
of a processor is included to the documentation on it (for example,
3244
of a processor is included to the documentation on it (for example,
3242
IA-32 Intel Architecture Software Developer's Manual,
3245
IA-32 Intel Architecture Software Developer's Manual,
3243
Volume 3, Appendix B); each processor family has its own subset
3246
Volume 3, Appendix B); each processor family has its own subset
3244
of the MSR-registers.
3247
of the MSR-registers.
3245
Parameters:
3248
Parameters:
3246
  * eax = 68 - function number
3249
  * eax = 68 - function number
3247
  * ebx = 4 - subfunction number
3250
  * ebx = 4 - subfunction number
3248
  * ecx is ignored
3251
  * ecx is ignored
3249
  * edx = MSR address
3252
  * edx = MSR address
3250
  * esi:edi = high:low dword
3253
  * esi:edi = high:low dword
3251
Returned value:
3254
Returned value:
3252
  * function does not return value
3255
  * function does not return value
3253
Remarks:
3256
Remarks:
3254
  * If ecx contains nonexistent or not implemented for this processor
3257
  * If ecx contains nonexistent or not implemented for this processor
3255
    MSR, processor will generate an exception in the kernel, which
3258
    MSR, processor will generate an exception in the kernel, which
3256
    will kill the thread.
3259
    will kill the thread.
3257
  * Previously it is necessary to check, whether MSRs are supported
3260
  * Previously it is necessary to check, whether MSRs are supported
3258
    as a whole, with the instruction 'cpuid'. Otherwise processor
3261
    as a whole, with the instruction 'cpuid'. Otherwise processor
3259
    will generate other exception in the kernel, which will anyway
3262
    will generate other exception in the kernel, which will anyway
3260
    kill the thread.
3263
    kill the thread.
3261
 
3264
 
3262
---------------------- Constants for registers: ----------------------
3265
---------------------- Constants for registers: ----------------------
3263
  eax - SF_SYS_MISC (68)
3266
  eax - SF_SYS_MISC (68)
3264
  ebx - SSF_WRITE_MSR (4)
3267
  ebx - SSF_WRITE_MSR (4)
3265
======================================================================
3268
======================================================================
3266
=== Function 68, subfunction 11 - initialize process heap ============
3269
=== Function 68, subfunction 11 - initialize process heap ============
3267
======================================================================
3270
======================================================================
3268
Parameters:
3271
Parameters:
3269
  * eax = 68 - function number
3272
  * eax = 68 - function number
3270
  * ebx = 11 - subfunction number
3273
  * ebx = 11 - subfunction number
3271
Returned value:
3274
Returned value:
3272
  * eax = 0 - failed
3275
  * eax = 0 - failed
3273
  * otherwise size of created heap
3276
  * otherwise size of created heap
3274
Remarks:
3277
Remarks:
3275
  * The function call initializes heap for subfunctions 12, 13 and 20.
3278
  * The function call initializes heap for subfunctions 12, 13 and 20.
3276
  * If the process heap is already created, this function will return
3279
  * If the process heap is already created, this function will return
3277
    the size of the existing heap.
3280
    the size of the existing heap.
3278
    Heap size is equal to total amount of free application memory.
3281
    Heap size is equal to total amount of free application memory.
3279
  * After creation of the heap calls to function 64 will be ignored.
3282
  * After creation of the heap calls to function 64 will be ignored.
3280
 
3283
 
3281
---------------------- Constants for registers: ----------------------
3284
---------------------- Constants for registers: ----------------------
3282
  eax - SF_SYS_MISC (68)
3285
  eax - SF_SYS_MISC (68)
3283
  ebx - SSF_HEAP_INIT (11)
3286
  ebx - SSF_HEAP_INIT (11)
3284
======================================================================
3287
======================================================================
3285
======== Function 68, subfunction 12 - allocate memory block. ========
3288
======== Function 68, subfunction 12 - allocate memory block. ========
3286
======================================================================
3289
======================================================================
3287
Parameters:
3290
Parameters:
3288
  * eax = 68 - function number
3291
  * eax = 68 - function number
3289
  * ebx = 12 - subfunction number
3292
  * ebx = 12 - subfunction number
3290
  * ecx = required size in bytes
3293
  * ecx = required size in bytes
3291
Returned value:
3294
Returned value:
3292
  * eax = pointer to the allocated block
3295
  * eax = pointer to the allocated block
3293
Remarks:
3296
Remarks:
3294
  * The function allocates an integer number of pages (4 Kb) in such
3297
  * The function allocates an integer number of pages (4 Kb) in such
3295
    way that the real size of allocated block is more than or equal to
3298
    way that the real size of allocated block is more than or equal to
3296
    requested size.
3299
    requested size.
3297
 
3300
 
3298
---------------------- Constants for registers: ----------------------
3301
---------------------- Constants for registers: ----------------------
3299
  eax - SF_SYS_MISC (68)
3302
  eax - SF_SYS_MISC (68)
3300
  ebx - SSF_MEM_ALLOC (12)
3303
  ebx - SSF_MEM_ALLOC (12)
3301
======================================================================
3304
======================================================================
3302
========== Function 68, subfunction 13 - free memory block. ==========
3305
========== Function 68, subfunction 13 - free memory block. ==========
3303
======================================================================
3306
======================================================================
3304
Parameters:
3307
Parameters:
3305
  * eax = 68 - function number
3308
  * eax = 68 - function number
3306
  * ebx = 13 - subfunction number
3309
  * ebx = 13 - subfunction number
3307
  * ecx = pointer to the memory block
3310
  * ecx = pointer to the memory block
3308
Returned value:
3311
Returned value:
3309
  * eax = 1 - success
3312
  * eax = 1 - success
3310
  * eax = 0 - failed
3313
  * eax = 0 - failed
3311
Remarks:
3314
Remarks:
3312
  * The memory block must have been allocated by subfunction 12
3315
  * The memory block must have been allocated by subfunction 12
3313
    or subfunction 20.
3316
    or subfunction 20.
3314
 
3317
 
3315
---------------------- Constants for registers: ----------------------
3318
---------------------- Constants for registers: ----------------------
3316
  eax - SF_SYS_MISC (68)
3319
  eax - SF_SYS_MISC (68)
3317
  ebx - SSF_MEM_FREE (13)
3320
  ebx - SSF_MEM_FREE (13)
3318
======================================================================
3321
======================================================================
3319
===================== Function 68, subfunction 14 ====================
3322
===================== Function 68, subfunction 14 ====================
3320
============ Wait for signal from another program/driver. ============
3323
============ Wait for signal from another program/driver. ============
3321
======================================================================
3324
======================================================================
3322
Parameters:
3325
Parameters:
3323
  * eax = 68 - function number
3326
  * eax = 68 - function number
3324
  * ebx = 14 - subfunction number
3327
  * ebx = 14 - subfunction number
3325
  * ecx = pointer to the buffer for information (24 bytes)
3328
  * ecx = pointer to the buffer for information (24 bytes)
3326
Returned value:
3329
Returned value:
3327
  * buffer pointed to by ecx contains the following information:
3330
  * buffer pointed to by ecx contains the following information:
3328
    * +0: dword: identifier for following data of signal
3331
    * +0: dword: identifier for following data of signal
3329
    * +4: dword: data of signal (20 bytes), format of which is defined
3332
    * +4: dword: data of signal (20 bytes), format of which is defined
3330
          by the first dword
3333
          by the first dword
3331
 
3334
 
3332
---------------------- Constants for registers: ----------------------
3335
---------------------- Constants for registers: ----------------------
3333
  eax - SF_SYS_MISC (68)
3336
  eax - SF_SYS_MISC (68)
3334
  ebx - SSF_WAIT_SIGNAL (14)
3337
  ebx - SSF_WAIT_SIGNAL (14)
3335
======================================================================
3338
======================================================================
3336
============= Function 68, subfunction 16 - load driver. =============
3339
============= Function 68, subfunction 16 - load driver. =============
3337
======================================================================
3340
======================================================================
3338
Parameters:
3341
Parameters:
3339
  * eax = 68 - function number
3342
  * eax = 68 - function number
3340
  * ebx = 16 - subfunction number
3343
  * ebx = 16 - subfunction number
3341
  * ecx = pointer to ASCIIZ-string with driver name
3344
  * ecx = pointer to ASCIIZ-string with driver name
3342
Returned value:
3345
Returned value:
3343
  * eax = 0 - failed
3346
  * eax = 0 - failed
3344
  * otherwise eax = driver handle
3347
  * otherwise eax = driver handle
3345
Remarks:
3348
Remarks:
3346
  * If the driver was not loaded yet, it is loaded;
3349
  * If the driver was not loaded yet, it is loaded;
3347
    if the driver was loaded yet, nothing happens.
3350
    if the driver was loaded yet, nothing happens.
3348
  * Driver name is case-sensitive.
3351
  * Driver name is case-sensitive.
3349
    Maximum length of the name is 16 characters, including
3352
    Maximum length of the name is 16 characters, including
3350
    terminating null character, the rest is ignored.
3353
    terminating null character, the rest is ignored.
3351
  * Driver ABC is loaded from file /sys/drivers/ABC.sys.
3354
  * Driver ABC is loaded from file /sys/drivers/ABC.sys.
3352
 
3355
 
3353
---------------------- Constants for registers: ----------------------
3356
---------------------- Constants for registers: ----------------------
3354
  eax - SF_SYS_MISC (68)
3357
  eax - SF_SYS_MISC (68)
3355
  ebx - SSF_LOAD_DRIVER (16)
3358
  ebx - SSF_LOAD_DRIVER (16)
3356
======================================================================
3359
======================================================================
3357
============ Function 68, subfunction 17 - driver control. ===========
3360
============ Function 68, subfunction 17 - driver control. ===========
3358
======================================================================
3361
======================================================================
3359
Parameters:
3362
Parameters:
3360
  * eax = 68 - function number
3363
  * eax = 68 - function number
3361
  * ebx = 17 - subfunction number
3364
  * ebx = 17 - subfunction number
3362
  * ecx = pointer to the control structure:
3365
  * ecx = pointer to the control structure:
3363
    * +0: dword: handle of driver
3366
    * +0: dword: handle of driver
3364
    * +4: dword: code of driver function
3367
    * +4: dword: code of driver function
3365
    * +8: dword: pointer to input data
3368
    * +8: dword: pointer to input data
3366
    * +12 = +0xC: dword: size of input data
3369
    * +12 = +0xC: dword: size of input data
3367
    * +16 = +0x10: dword: pointer to output data
3370
    * +16 = +0x10: dword: pointer to output data
3368
    * +20 = +0x14: dword: size of output data
3371
    * +20 = +0x14: dword: size of output data
3369
Returned value:
3372
Returned value:
3370
  * eax = determined by driver
3373
  * eax = determined by driver
3371
Remarks:
3374
Remarks:
3372
  * Function codes and the structure of input/output data
3375
  * Function codes and the structure of input/output data
3373
    are defined by driver.
3376
    are defined by driver.
3374
  * Previously one must obtain driver handle by subfunction 16.
3377
  * Previously one must obtain driver handle by subfunction 16.
3375
 
3378
 
3376
---------------------- Constants for registers: ----------------------
3379
---------------------- Constants for registers: ----------------------
3377
  eax - SF_SYS_MISC (68)
3380
  eax - SF_SYS_MISC (68)
3378
  ebx - SSF_CONTROL_DRIVER (17)
3381
  ebx - SSF_CONTROL_DRIVER (17)
3379
======================================================================
3382
======================================================================
3380
== Function 68, subfunction 18 - load DLL, specifying the encoding. ==
3383
== Function 68, subfunction 18 - load DLL, specifying the encoding. ==
3381
======================================================================
3384
======================================================================
3382
Parameters:
3385
Parameters:
3383
  * eax = 68 - function number
3386
  * eax = 68 - function number
3384
  * ebx = 18 - subfunction number
3387
  * ebx = 18 - subfunction number
3385
  * ecx = pointer to the string with path to DLL
3388
  * ecx = pointer to the string with path to DLL
3386
  * edx = string encoding, details can be found in function 80 description.
3389
  * edx = string encoding, details can be found in function 80 description.
3387
Returned value:
3390
Returned value:
3388
  * eax = 0 - failed
3391
  * eax = 0 - failed
3389
  * otherwise eax = pointer to DLL export table
3392
  * otherwise eax = pointer to DLL export table
3390
Remarks:
3393
Remarks:
3391
  * Export table is an array of structures of 2 dword's, terminated
3394
  * Export table is an array of structures of 2 dword's, terminated
3392
    by zero. The first dword in structure points to function name,
3395
    by zero. The first dword in structure points to function name,
3393
    the second dword contains address of function.
3396
    the second dword contains address of function.
3394
 
3397
 
3395
======================================================================
3398
======================================================================
3396
=============== Function 68, subfunction 19 - load DLL. ==============
3399
=============== Function 68, subfunction 19 - load DLL. ==============
3397
======================================================================
3400
======================================================================
3398
Parameters:
3401
Parameters:
3399
  * eax = 68 - function number
3402
  * eax = 68 - function number
3400
  * ebx = 19 - subfunction number
3403
  * ebx = 19 - subfunction number
3401
  * ecx = pointer to the string with path to DLL,
3404
  * ecx = pointer to the string with path to DLL,
3402
    rules of path forming can be found in function 70 description.
3405
    rules of path forming can be found in function 70 description.
3403
Returned value:
3406
Returned value:
3404
  * eax = 0 - failed
3407
  * eax = 0 - failed
3405
  * otherwise eax = pointer to DLL export table
3408
  * otherwise eax = pointer to DLL export table
3406
 
3409
 
3407
---------------------- Constants for registers: ----------------------
3410
---------------------- Constants for registers: ----------------------
3408
  eax - SF_SYS_MISC (68)
3411
  eax - SF_SYS_MISC (68)
3409
  ebx - SSF_LOAD_DLL (19)
3412
  ebx - SSF_LOAD_DLL (19)
3410
======================================================================
3413
======================================================================
3411
======= Function 68, subfunction 20 - reallocate memory block. =======
3414
======= Function 68, subfunction 20 - reallocate memory block. =======
3412
======================================================================
3415
======================================================================
3413
Parameters:
3416
Parameters:
3414
  * eax = 68 - function number
3417
  * eax = 68 - function number
3415
  * ebx = 20 - subfunction number
3418
  * ebx = 20 - subfunction number
3416
  * ecx = new size in bytes
3419
  * ecx = new size in bytes
3417
  * edx = pointer to already allocated block
3420
  * edx = pointer to already allocated block
3418
Returned value:
3421
Returned value:
3419
  * eax = pointer to the reallocated block, 0 = error
3422
  * eax = pointer to the reallocated block, 0 = error
3420
Remarks:
3423
Remarks:
3421
  * Before this call one must initialize process heap by call to
3424
  * Before this call one must initialize process heap by call to
3422
    subfunction 11.
3425
    subfunction 11.
3423
  * The function allocates an integer number of pages (4 Kb) in such
3426
  * The function allocates an integer number of pages (4 Kb) in such
3424
    way that the real size of allocated block is more than or equal to
3427
    way that the real size of allocated block is more than or equal to
3425
    requested size.
3428
    requested size.
3426
  * If edx=0, the function call is equivalent to memory allocation
3429
  * If edx=0, the function call is equivalent to memory allocation
3427
    with subfunction 12. Otherwise the block at edx
3430
    with subfunction 12. Otherwise the block at edx
3428
    must be allocated earlier with subfunction 12 or this subfunction.
3431
    must be allocated earlier with subfunction 12 or this subfunction.
3429
  * If ecx=0, the function frees memory block at edx and returns 0.
3432
  * If ecx=0, the function frees memory block at edx and returns 0.
3430
  * The contents of the block are unchanged up to the shorter of
3433
  * The contents of the block are unchanged up to the shorter of
3431
    the new and old sizes.
3434
    the new and old sizes.
3432
 
3435
 
3433
---------------------- Constants for registers: ----------------------
3436
---------------------- Constants for registers: ----------------------
3434
  eax - SF_SYS_MISC (68)
3437
  eax - SF_SYS_MISC (68)
3435
  ebx - SSF_MEM_REALLOC (20)
3438
  ebx - SSF_MEM_REALLOC (20)
3436
======================================================================
3439
======================================================================
3437
=========== Function 68, subfunction 21 - load driver PE. ============
3440
=========== Function 68, subfunction 21 - load driver PE. ============
3438
======================================================================
3441
======================================================================
3439
Parameters:
3442
Parameters:
3440
  * eax = 68 - function number
3443
  * eax = 68 - function number
3441
  * ebx = 21 - subfunction number
3444
  * ebx = 21 - subfunction number
3442
  * ecx = pointer to ASCIIZ-string with driver name
3445
  * ecx = pointer to ASCIIZ-string with driver name
3443
  * edx = pointer to command line
3446
  * edx = pointer to command line
3444
Returned value:
3447
Returned value:
3445
  * eax = 0 - failed
3448
  * eax = 0 - failed
3446
  * otherwise eax = driver handle
3449
  * otherwise eax = driver handle
3447
Remarks:
3450
Remarks:
3448
  * If the driver was not loaded yet, it is loaded;
3451
  * If the driver was not loaded yet, it is loaded;
3449
    if the driver was loaded yet, nothing happens.
3452
    if the driver was loaded yet, nothing happens.
3450
 
3453
 
3451
---------------------- Constants for registers: ----------------------
3454
---------------------- Constants for registers: ----------------------
3452
  eax - SF_SYS_MISC (68)
3455
  eax - SF_SYS_MISC (68)
3453
  ebx - SSF_LOAD_DRIVER_PE (21)
3456
  ebx - SSF_LOAD_DRIVER_PE (21)
3454
======================================================================
3457
======================================================================
3455
======== Function 68, subfunction 22 - open named memory area. =======
3458
======== Function 68, subfunction 22 - open named memory area. =======
3456
======================================================================
3459
======================================================================
3457
Parameters:
3460
Parameters:
3458
  * eax = 68 - function number
3461
  * eax = 68 - function number
3459
  * ebx = 22 - subfunction number
3462
  * ebx = 22 - subfunction number
3460
  * ecx = area name. Maximum of 31 characters with terminating zero
3463
  * ecx = area name. Maximum of 31 characters with terminating zero
3461
  * edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
3464
  * edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
3462
  * esi = flags for open and access:
3465
  * esi = flags for open and access:
3463
    * SHM_OPEN        = 0x00 - open existing memory area. If an area
3466
    * SHM_OPEN        = 0x00 - open existing memory area. If an area
3464
                          with such name does not exist, the function
3467
                          with such name does not exist, the function
3465
                          will return error code 5.
3468
                          will return error code 5.
3466
    * SHM_OPEN_ALWAYS = 0x04 - open existing or create new
3469
    * SHM_OPEN_ALWAYS = 0x04 - open existing or create new
3467
                          memory area.
3470
                          memory area.
3468
    * SHM_CREATE      = 0x08 - create new memory area. If an area
3471
    * SHM_CREATE      = 0x08 - create new memory area. If an area
3469
                          with such name already exists, the function
3472
                          with such name already exists, the function
3470
                          will return error code 10.
3473
                          will return error code 10.
3471
    * SHM_READ        = 0x00 - only read access
3474
    * SHM_READ        = 0x00 - only read access
3472
    * SHM_WRITE       = 0x01 - read and write access
3475
    * SHM_WRITE       = 0x01 - read and write access
3473
Returned value:
3476
Returned value:
3474
  * eax = pointer to memory area, 0 if error has occurred
3477
  * eax = pointer to memory area, 0 if error has occurred
3475
  * if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS):
3478
  * if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS):
3476
    edx = 0 - success, otherwise - error code
3479
    edx = 0 - success, otherwise - error code
3477
  * if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS):
3480
  * if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS):
3478
    edx = error code (if eax=0) or area size in bytes
3481
    edx = error code (if eax=0) or area size in bytes
3479
Error codes:
3482
Error codes:
3480
  * E_NOTFOUND = 5
3483
  * E_NOTFOUND = 5
3481
  * E_ACCESS = 10
3484
  * E_ACCESS = 10
3482
  * E_NOMEM = 30
3485
  * E_NOMEM = 30
3483
  * E_PARAM = 33
3486
  * E_PARAM = 33
3484
Remarks:
3487
Remarks:
3485
  * Before this call one must initialize process heap by call to
3488
  * Before this call one must initialize process heap by call to
3486
    subfunction 11.
3489
    subfunction 11.
3487
  * If a new area is created, access flags set maximal rights
3490
  * If a new area is created, access flags set maximal rights
3488
    for other processes. An attempt from other process to open
3491
    for other processes. An attempt from other process to open
3489
    with denied rights will fail with error code E_ACCESS.
3492
    with denied rights will fail with error code E_ACCESS.
3490
  * The process which has created an area always has write access.
3493
  * The process which has created an area always has write access.
3491
 
3494
 
3492
---------------------- Constants for registers: ----------------------
3495
---------------------- Constants for registers: ----------------------
3493
  eax - SF_SYS_MISC (68)
3496
  eax - SF_SYS_MISC (68)
3494
  ebx - SSF_MEM_OPEN (22)
3497
  ebx - SSF_MEM_OPEN (22)
3495
======================================================================
3498
======================================================================
3496
======= Function 68, subfunction 23 - close named memory area. =======
3499
======= Function 68, subfunction 23 - close named memory area. =======
3497
======================================================================
3500
======================================================================
3498
Parameters:
3501
Parameters:
3499
  * eax = 68 - function number
3502
  * eax = 68 - function number
3500
  * ebx = 23 - subfunction number
3503
  * ebx = 23 - subfunction number
3501
  * ecx = area name. Maximum of 31 characters with terminating zero
3504
  * ecx = area name. Maximum of 31 characters with terminating zero
3502
Returned value:
3505
Returned value:
3503
  * eax destroyed
3506
  * eax destroyed
3504
Remarks:
3507
Remarks:
3505
  * A memory area is physically freed (with deleting all data and
3508
  * A memory area is physically freed (with deleting all data and
3506
    freeing physical memory), when all threads which have opened
3509
    freeing physical memory), when all threads which have opened
3507
    this area will close it.
3510
    this area will close it.
3508
  * When thread is terminating, all opened by it areas are closed.
3511
  * When thread is terminating, all opened by it areas are closed.
3509
 
3512
 
3510
---------------------- Constants for registers: ----------------------
3513
---------------------- Constants for registers: ----------------------
3511
  eax - SF_SYS_MISC (68)
3514
  eax - SF_SYS_MISC (68)
3512
  ebx - SSF_MEM_CLOSE (23)
3515
  ebx - SSF_MEM_CLOSE (23)
3513
======================================================================
3516
======================================================================
3514
======== Function 68, subfunction 24 - set exception handler. ========
3517
======== Function 68, subfunction 24 - set exception handler. ========
3515
======================================================================
3518
======================================================================
3516
Parameters:
3519
Parameters:
3517
  * eax = 68 - function number
3520
  * eax = 68 - function number
3518
  * ebx = 24 - subfunction number
3521
  * ebx = 24 - subfunction number
3519
  * ecx = address of the new exception handler
3522
  * ecx = address of the new exception handler
3520
  * edx = the mask of handled exceptions
3523
  * edx = the mask of handled exceptions
3521
Returned value:
3524
Returned value:
3522
  * eax = address of the old exception handler (0, if it was not set)
3525
  * eax = address of the old exception handler (0, if it was not set)
3523
  * ebx = the old mask of handled exceptions
3526
  * ebx = the old mask of handled exceptions
3524
Remarks:
3527
Remarks:
3525
  * Bit number in mask of exceptions corresponds to exception number
3528
  * Bit number in mask of exceptions corresponds to exception number
3526
    in CPU-specification (Intel-PC). For example, FPU exceptions have
3529
    in CPU-specification (Intel-PC). For example, FPU exceptions have
3527
    number 16 (#MF), and SSE exceptions - 19 (#XF).
3530
    number 16 (#MF), and SSE exceptions - 19 (#XF).
3528
  * The current implementation ignores the inquiry for hook of 7
3531
  * The current implementation ignores the inquiry for hook of 7
3529
    exception - the system handles #NM by its own.
3532
    exception - the system handles #NM by its own.
3530
  * The exception handler is called with exception number as first
3533
  * The exception handler is called with exception number as first
3531
    (and only) stack parameter. So, correct exit from the handler is
3534
    (and only) stack parameter. So, correct exit from the handler is
3532
    RET 4. It returns to the instruction, that caused the exception,
3535
    RET 4. It returns to the instruction, that caused the exception,
3533
    for faults, and to the next instruction for traps (see
3536
    for faults, and to the next instruction for traps (see
3534
    classification of exceptions in CPU specification).
3537
    classification of exceptions in CPU specification).
3535
  * When user handler receives control, the corresponding bit in
3538
  * When user handler receives control, the corresponding bit in
3536
    the exception mask is cleared. Raising this exception
3539
    the exception mask is cleared. Raising this exception
3537
    in consequence leads to default handling, that is,
3540
    in consequence leads to default handling, that is,
3538
    terminating the application in absence of debugger or
3541
    terminating the application in absence of debugger or
3539
    suspend with notification of debugger otherwise.
3542
    suspend with notification of debugger otherwise.
3540
  * After user handler completes critical operations, it can set
3543
  * After user handler completes critical operations, it can set
3541
    the corresponding bit in the exception mask with subfunction 25.
3544
    the corresponding bit in the exception mask with subfunction 25.
3542
    Also user handler is responsible for clearing exceptions flags in
3545
    Also user handler is responsible for clearing exceptions flags in
3543
    FPU and/or SSE.
3546
    FPU and/or SSE.
3544
 
3547
 
3545
---------------------- Constants for registers: ----------------------
3548
---------------------- Constants for registers: ----------------------
3546
  eax - SF_SYS_MISC (68)
3549
  eax - SF_SYS_MISC (68)
3547
  ebx - SSF_SET_EXCEPTION_HANDLER (24)
3550
  ebx - SSF_SET_EXCEPTION_HANDLER (24)
3548
======================================================================
3551
======================================================================
3549
======== Function 68, subfunction 25 - set exception activity ========
3552
======== Function 68, subfunction 25 - set exception activity ========
3550
======================================================================
3553
======================================================================
3551
Parameters:
3554
Parameters:
3552
  * eax = 68 - function number
3555
  * eax = 68 - function number
3553
  * ebx = 25 - subfunction number
3556
  * ebx = 25 - subfunction number
3554
  * ecx = signal number
3557
  * ecx = signal number
3555
  * edx = value of activity (0/1)
3558
  * edx = value of activity (0/1)
3556
Returned value:
3559
Returned value:
3557
  * eax = -1 - invalid signal number
3560
  * eax = -1 - invalid signal number
3558
  * otherwise eax = old value of activity for this signal (0/1)
3561
  * otherwise eax = old value of activity for this signal (0/1)
3559
Remarks:
3562
Remarks:
3560
  * In current implementation only mask for user exception handler,
3563
  * In current implementation only mask for user exception handler,
3561
    which has been previously set by subfunction 24,
3564
    which has been previously set by subfunction 24,
3562
    is changed. Signal number corresponds to exception number.
3565
    is changed. Signal number corresponds to exception number.
3563
 
3566
 
3564
---------------------- Constants for registers: ----------------------
3567
---------------------- Constants for registers: ----------------------
3565
  eax - SF_SYS_MISC (68)
3568
  eax - SF_SYS_MISC (68)
3566
  ebx - SSF_SET_EXCEPTION_STATE (25)
3569
  ebx - SSF_SET_EXCEPTION_STATE (25)
3567
======================================================================
3570
======================================================================
3568
====== Function 68, subfunction 26 - release memory pages ============
3571
====== Function 68, subfunction 26 - release memory pages ============
3569
======================================================================
3572
======================================================================
3570
Parameters:
3573
Parameters:
3571
  * eax = 68 - function number
3574
  * eax = 68 - function number
3572
  * ebx = 26 - subfunction number
3575
  * ebx = 26 - subfunction number
3573
  * ecx = pointer to the memory block, allocated by subfunction 12
3576
  * ecx = pointer to the memory block, allocated by subfunction 12
3574
  * edx = offset from the block beginnings
3577
  * edx = offset from the block beginnings
3575
  * esi = the size of the region of memory to release, in bytes
3578
  * esi = the size of the region of memory to release, in bytes
3576
Remarks:
3579
Remarks:
3577
  * function release range of pages from ecx+edx to ecx+edx+esi
3580
  * function release range of pages from ecx+edx to ecx+edx+esi
3578
    and set virtual memory into reserved state.
3581
    and set virtual memory into reserved state.
3579
 
3582
 
3580
---------------------- Constants for registers: ----------------------
3583
---------------------- Constants for registers: ----------------------
3581
  eax - SF_SYS_MISC (68)
3584
  eax - SF_SYS_MISC (68)
3582
  ebx - SSF_MEM_FREE_EXT (26)
3585
  ebx - SSF_MEM_FREE_EXT (26)
3583
======================================================================
3586
======================================================================
3584
========== Function 68, subfunction 27 - load file ===================
3587
========== Function 68, subfunction 27 - load file ===================
3585
======================================================================
3588
======================================================================
3586
Parameters:
3589
Parameters:
3587
  * eax = 68 - function number
3590
  * eax = 68 - function number
3588
  * ebx = 27 - subfunction number
3591
  * ebx = 27 - subfunction number
3589
  * ecx = pointer to the string with path to file,
3592
  * ecx = pointer to the string with path to file,
3590
    rules of path forming can be found in function 70 description.
3593
    rules of path forming can be found in function 70 description.
3591
Returned value:
3594
Returned value:
3592
  * eax = pointer to the loaded file, or zero
3595
  * eax = pointer to the loaded file, or zero
3593
  * edx = size of the loaded file, or zero
3596
  * edx = size of the loaded file, or zero
3594
Remarks:
3597
Remarks:
3595
  * function loads file and unpacks, if necessary
3598
  * function loads file and unpacks, if necessary
3596
  * Before this call one must initialize process heap by call to
3599
  * Before this call one must initialize process heap by call to
3597
    subfunction 11.  
3600
    subfunction 11.  
3598
 
3601
 
3599
---------------------- Constants for registers: ----------------------
3602
---------------------- Constants for registers: ----------------------
3600
  eax - SF_SYS_MISC (68)
3603
  eax - SF_SYS_MISC (68)
3601
  ebx - SSF_LOAD_FILE (27)
3604
  ebx - SSF_LOAD_FILE (27)
3602
======================================================================
3605
======================================================================
3603
== Function 68, subfunction 28 - load file, specifying the encoding ==
3606
== Function 68, subfunction 28 - load file, specifying the encoding ==
3604
======================================================================
3607
======================================================================
3605
Parameters:
3608
Parameters:
3606
  * eax = 68 - function number
3609
  * eax = 68 - function number
3607
  * ebx = 28 - subfunction number
3610
  * ebx = 28 - subfunction number
3608
  * ecx = pointer to the string with path to file
3611
  * ecx = pointer to the string with path to file
3609
  * edx = string encoding, details can be found in function 80 description.
3612
  * edx = string encoding, details can be found in function 80 description.
3610
Returned value:
3613
Returned value:
3611
  * eax = pointer to the loaded file, or zero
3614
  * eax = pointer to the loaded file, or zero
3612
  * edx = size of the loaded file, or zero
3615
  * edx = size of the loaded file, or zero
3613
Remarks:
3616
Remarks:
3614
  * function loads file and unpacks, if necessary
3617
  * function loads file and unpacks, if necessary
3615
======================================================================
3618
======================================================================
3616
======== Function 68, subfunction 29 - allocate ring memory. =========
3619
======== Function 68, subfunction 29 - allocate ring memory. =========
3617
======================================================================
3620
======================================================================
3618
Parameters:
3621
Parameters:
3619
  * eax = 68 - function number
3622
  * eax = 68 - function number
3620
  * ebx = 29 - subfunction number
3623
  * ebx = 29 - subfunction number
3621
  * ecx = required size in bytes
3624
  * ecx = required size in bytes
3622
Returned value:
3625
Returned value:
3623
  * eax = 0 - failed
3626
  * eax = 0 - failed
3624
  * eax = pointer to the allocated ring
3627
  * eax = pointer to the allocated ring
3625
Remarks:
3628
Remarks:
3626
  * The requested size must be an exact multiple of pagesize (4 Kb)
3629
  * The requested size must be an exact multiple of pagesize (4 Kb)
3627
  * The function allocates memory in such a way that you can read and
3630
  * The function allocates memory in such a way that you can read and
3628
    write beyond the size of the allocated memory and will reach the 
3631
    write beyond the size of the allocated memory and will reach the 
3629
    beginning of the buffer again.
3632
    beginning of the buffer again.
3630
 
3633
 
3631
---------------------- Constants for registers: ----------------------
3634
---------------------- Constants for registers: ----------------------
3632
  eax - SF_SYS_MISC (68)
3635
  eax - SF_SYS_MISC (68)
3633
  ebx - SSF_MEM_ALLOC_RING (29)  
3636
  ebx - SSF_MEM_ALLOC_RING (29)  
3634
 
3637
 
3635
======================================================================
3638
======================================================================
3636
====================== Function 69 - debugging. ======================
3639
====================== Function 69 - debugging. ======================
3637
======================================================================
3640
======================================================================
3638
A process can load other process as debugged by set of corresponding
3641
A process can load other process as debugged by set of corresponding
3639
bit by call to subfunction 7 of function 70.
3642
bit by call to subfunction 7 of function 70.
3640
A process can have only one debugger; one process can debug some
3643
A process can have only one debugger; one process can debug some
3641
others. The system notifies debugger on events occurring with
3644
others. The system notifies debugger on events occurring with
3642
debugged process. Messages are written to the buffer defined by
3645
debugged process. Messages are written to the buffer defined by
3643
subfunction 0.
3646
subfunction 0.
3644
Format of a message:
3647
Format of a message:
3645
  * +0: dword: message code
3648
  * +0: dword: message code
3646
  * +4: dword: PID of debugged process
3649
  * +4: dword: PID of debugged process
3647
  * +8: there can be additional data depending on message code
3650
  * +8: there can be additional data depending on message code
3648
Message codes:
3651
Message codes:
3649
  * 1 = exception
3652
  * 1 = exception
3650
    * in addition dword-number of the exception is given
3653
    * in addition dword-number of the exception is given
3651
    * process is suspended
3654
    * process is suspended
3652
  * 2 = process has terminated
3655
  * 2 = process has terminated
3653
    * comes at any termination: both through the system function -1,
3656
    * comes at any termination: both through the system function -1,
3654
      and at "murder" by any other process (including debugger itself)
3657
      and at "murder" by any other process (including debugger itself)
3655
  * 3 = debug exception int 1 = #DB
3658
  * 3 = debug exception int 1 = #DB
3656
    * in addition dword-image of the register DR6 is given:
3659
    * in addition dword-image of the register DR6 is given:
3657
      * bits 0-3: condition of the corresponding breakpoint (set by
3660
      * bits 0-3: condition of the corresponding breakpoint (set by
3658
        subfunction 9) is satisfied
3661
        subfunction 9) is satisfied
3659
      * bit 14: exception has occurred because of the trace mode
3662
      * bit 14: exception has occurred because of the trace mode
3660
        (flag TF is set TF)
3663
        (flag TF is set TF)
3661
    * process is suspended
3664
    * process is suspended
3662
When debugger terminates, all debugged processes are killed.
3665
When debugger terminates, all debugged processes are killed.
3663
If debugger does not want this, it must previously detach by
3666
If debugger does not want this, it must previously detach by
3664
subfunction 3.
3667
subfunction 3.
3665
 
3668
 
3666
All subfunctions are applicable only to processes/threads started
3669
All subfunctions are applicable only to processes/threads started
3667
from the current by function 70 with set debugging flag.
3670
from the current by function 70 with set debugging flag.
3668
Debugging of multithreaded programs is not supported yet.
3671
Debugging of multithreaded programs is not supported yet.
3669
The full list of subfunctions:
3672
The full list of subfunctions:
3670
  * subfunction 0 - define data area for debug messages
3673
  * subfunction 0 - define data area for debug messages
3671
  * subfunction 1 - get contents of registers of debugged thread
3674
  * subfunction 1 - get contents of registers of debugged thread
3672
  * subfunction 2 - set contents of registers of debugged thread
3675
  * subfunction 2 - set contents of registers of debugged thread
3673
  * subfunction 3 - detach from debugged process
3676
  * subfunction 3 - detach from debugged process
3674
  * subfunction 4 - suspend debugged thread
3677
  * subfunction 4 - suspend debugged thread
3675
  * subfunction 5 - resume debugged thread
3678
  * subfunction 5 - resume debugged thread
3676
  * subfunction 6 - read from the memory of debugged process
3679
  * subfunction 6 - read from the memory of debugged process
3677
  * subfunction 7 - write to the memory of debugged process
3680
  * subfunction 7 - write to the memory of debugged process
3678
  * subfunction 8 - terminate debugged thread
3681
  * subfunction 8 - terminate debugged thread
3679
  * subfunction 9 - set/clear hardware breakpoint
3682
  * subfunction 9 - set/clear hardware breakpoint
3680
 
3683
 
3681
---------------------- Constants for registers: ----------------------
3684
---------------------- Constants for registers: ----------------------
3682
  eax - SF_DEBUG (69)
3685
  eax - SF_DEBUG (69)
3683
  ebx - SSF_SET_MESSAGE_AREA (0), SSF_GET_REGISTERS (1),
3686
  ebx - SSF_SET_MESSAGE_AREA (0), SSF_GET_REGISTERS (1),
3684
    SSF_SET_REGISTERS (2), SSF_DETACH (3), SSF_SUSPEND (4),
3687
    SSF_SET_REGISTERS (2), SSF_DETACH (3), SSF_SUSPEND (4),
3685
    SSF_RESUME (5), SSF_READ_MEMORY (6), SSF_WRITE_MEMORY (7),
3688
    SSF_RESUME (5), SSF_READ_MEMORY (6), SSF_WRITE_MEMORY (7),
3686
    SSF_TERMINATE (8), SSF_DEFINE_BREAKPOINT (9)
3689
    SSF_TERMINATE (8), SSF_DEFINE_BREAKPOINT (9)
3687
======================================================================
3690
======================================================================
3688
= Function 69, subfunction 0 - define data area fror debug messages. =
3691
= Function 69, subfunction 0 - define data area fror debug messages. =
3689
======================================================================
3692
======================================================================
3690
Parameters:
3693
Parameters:
3691
  * eax = 69 - function number
3694
  * eax = 69 - function number
3692
  * ebx = 0 - subfunction number
3695
  * ebx = 0 - subfunction number
3693
  * ecx = pointer
3696
  * ecx = pointer
3694
Format of data area:
3697
Format of data area:
3695
  * +0: dword: N = buffer size (not including this header)
3698
  * +0: dword: N = buffer size (not including this header)
3696
  * +4: dword: occupied place
3699
  * +4: dword: occupied place
3697
  * +8: N*byte: buffer
3700
  * +8: N*byte: buffer
3698
Returned value:
3701
Returned value:
3699
  * function does not return value
3702
  * function does not return value
3700
Remarks:
3703
Remarks:
3701
  * If the size field is negative, the buffer is considered locked
3704
  * If the size field is negative, the buffer is considered locked
3702
    and at arrival of new message the system will wait.
3705
    and at arrival of new message the system will wait.
3703
    For synchronization frame all work with the buffer by operations
3706
    For synchronization frame all work with the buffer by operations
3704
    lock/unlock
3707
    lock/unlock
3705
        neg     [bufsize]
3708
        neg     [bufsize]
3706
  * Data in the buffer are considered as array of items with variable
3709
  * Data in the buffer are considered as array of items with variable
3707
    length - messages. Format of a message is explained in
3710
    length - messages. Format of a message is explained in
3708
    general description.
3711
    general description.
3709
 
3712
 
3710
---------------------- Constants for registers: ----------------------
3713
---------------------- Constants for registers: ----------------------
3711
  eax - SF_DEBUG (69)
3714
  eax - SF_DEBUG (69)
3712
  ebx - SSF_SET_MESSAGE_AREA (0)
3715
  ebx - SSF_SET_MESSAGE_AREA (0)
3713
======================================================================
3716
======================================================================
3714
===================== Function 69, subfunction 1 =====================
3717
===================== Function 69, subfunction 1 =====================
3715
============ Get contents of registers of debugged thread. ===========
3718
============ Get contents of registers of debugged thread. ===========
3716
======================================================================
3719
======================================================================
3717
Parameters:
3720
Parameters:
3718
  * eax = 69 - function number
3721
  * eax = 69 - function number
3719
  * ebx = 1 - subfunction number
3722
  * ebx = 1 - subfunction number
3720
  * ecx = thread identifier
3723
  * ecx = thread identifier
3721
  * edx = size of context structure, must be 0x28=40 bytes
3724
  * edx = size of context structure, must be 0x28=40 bytes
3722
  * esi = pointer to context structure
3725
  * esi = pointer to context structure
3723
Returned value:
3726
Returned value:
3724
  * function does not return value
3727
  * function does not return value
3725
Format of context structure: (FPU is not supported yet)
3728
Format of context structure: (FPU is not supported yet)
3726
  * +0: dword: eip
3729
  * +0: dword: eip
3727
  * +4: dword: eflags
3730
  * +4: dword: eflags
3728
  * +8: dword: eax
3731
  * +8: dword: eax
3729
  * +12 = +0xC: dword: ecx
3732
  * +12 = +0xC: dword: ecx
3730
  * +16 = +0x10: dword: edx
3733
  * +16 = +0x10: dword: edx
3731
  * +20 = +0x14: dword: ebx
3734
  * +20 = +0x14: dword: ebx
3732
  * +24 = +0x18: dword: esp
3735
  * +24 = +0x18: dword: esp
3733
  * +28 = +0x1C: dword: ebp
3736
  * +28 = +0x1C: dword: ebp
3734
  * +32 = +0x20: dword: esi
3737
  * +32 = +0x20: dword: esi
3735
  * +36 = +0x24: dword: edi
3738
  * +36 = +0x24: dword: edi
3736
Remarks:
3739
Remarks:
3737
  * If the thread executes code of ring-0, the function returns
3740
  * If the thread executes code of ring-0, the function returns
3738
    contents of registers of ring-3.
3741
    contents of registers of ring-3.
3739
  * Process must be loaded for debugging (as is shown in
3742
  * Process must be loaded for debugging (as is shown in
3740
    general description).
3743
    general description).
3741
 
3744
 
3742
---------------------- Constants for registers: ----------------------
3745
---------------------- Constants for registers: ----------------------
3743
  eax - SF_DEBUG (69)
3746
  eax - SF_DEBUG (69)
3744
  ebx - SSF_GET_REGISTERS (1)
3747
  ebx - SSF_GET_REGISTERS (1)
3745
======================================================================
3748
======================================================================
3746
===================== Function 69, subfunction 2 =====================
3749
===================== Function 69, subfunction 2 =====================
3747
============ Set contents of registers of debugged thread. ===========
3750
============ Set contents of registers of debugged thread. ===========
3748
======================================================================
3751
======================================================================
3749
Parameters:
3752
Parameters:
3750
  * eax = 69 - function number
3753
  * eax = 69 - function number
3751
  * ebx = 2 - subfunction number
3754
  * ebx = 2 - subfunction number
3752
  * ecx = thread identifier
3755
  * ecx = thread identifier
3753
  * edx = size of context structure, must be 0x28=40 bytes
3756
  * edx = size of context structure, must be 0x28=40 bytes
3754
  * esi -> context structure
3757
  * esi -> context structure
3755
Returned value:
3758
Returned value:
3756
  * function does not return value
3759
  * function does not return value
3757
Format of context structure is shown in the description of
3760
Format of context structure is shown in the description of
3758
subfunction 1.
3761
subfunction 1.
3759
Remarks:
3762
Remarks:
3760
  * If the thread executes code of ring-0, the function returns
3763
  * If the thread executes code of ring-0, the function returns
3761
    contents of registers of ring-3.
3764
    contents of registers of ring-3.
3762
  * Process must be loaded for debugging (as is shown in
3765
  * Process must be loaded for debugging (as is shown in
3763
    general description).
3766
    general description).
3764
 
3767
 
3765
---------------------- Constants for registers: ----------------------
3768
---------------------- Constants for registers: ----------------------
3766
  eax - SF_DEBUG (69)
3769
  eax - SF_DEBUG (69)
3767
  ebx - SSF_SET_REGISTERS (2)
3770
  ebx - SSF_SET_REGISTERS (2)
3768
======================================================================
3771
======================================================================
3769
===== Function 69, subfunction 3 - detach from debugged process. =====
3772
===== Function 69, subfunction 3 - detach from debugged process. =====
3770
======================================================================
3773
======================================================================
3771
Parameters:
3774
Parameters:
3772
  * eax = 69 - function number
3775
  * eax = 69 - function number
3773
  * ebx = 3 - subfunction number
3776
  * ebx = 3 - subfunction number
3774
  * ecx = identifier
3777
  * ecx = identifier
3775
Returned value:
3778
Returned value:
3776
  * function does not return value
3779
  * function does not return value
3777
Remarks:
3780
Remarks:
3778
  * If the process was suspended, it resumes execution.
3781
  * If the process was suspended, it resumes execution.
3779
 
3782
 
3780
---------------------- Constants for registers: ----------------------
3783
---------------------- Constants for registers: ----------------------
3781
  eax - SF_DEBUG (69)
3784
  eax - SF_DEBUG (69)
3782
  ebx - SSF_DETACH (3)
3785
  ebx - SSF_DETACH (3)
3783
======================================================================
3786
======================================================================
3784
======== Function 69, subfunction 4 - suspend debugged thread. =======
3787
======== Function 69, subfunction 4 - suspend debugged thread. =======
3785
======================================================================
3788
======================================================================
3786
Parameters:
3789
Parameters:
3787
  * eax = 69 - function number
3790
  * eax = 69 - function number
3788
  * ebx = 4 - subfunction number
3791
  * ebx = 4 - subfunction number
3789
  * ecx = thread identifier
3792
  * ecx = thread identifier
3790
Returned value:
3793
Returned value:
3791
  * function does not return value
3794
  * function does not return value
3792
Remarks:
3795
Remarks:
3793
  * Process must be loaded for debugging (as is shown in
3796
  * Process must be loaded for debugging (as is shown in
3794
    general description).
3797
    general description).
3795
 
3798
 
3796
---------------------- Constants for registers: ----------------------
3799
---------------------- Constants for registers: ----------------------
3797
  eax - SF_DEBUG (69)
3800
  eax - SF_DEBUG (69)
3798
  ebx - SSF_SUSPEND (4)
3801
  ebx - SSF_SUSPEND (4)
3799
======================================================================
3802
======================================================================
3800
======== Function 69, subfunction 5 - resume debugged thread. ========
3803
======== Function 69, subfunction 5 - resume debugged thread. ========
3801
======================================================================
3804
======================================================================
3802
Parameters:
3805
Parameters:
3803
  * eax = 69 - function number
3806
  * eax = 69 - function number
3804
  * ebx = 5 - subfunction number
3807
  * ebx = 5 - subfunction number
3805
  * ecx = thread identifier
3808
  * ecx = thread identifier
3806
Returned value:
3809
Returned value:
3807
  * function does not return value
3810
  * function does not return value
3808
Remarks:
3811
Remarks:
3809
  * Process must be loaded for debugging (as is shown in
3812
  * Process must be loaded for debugging (as is shown in
3810
    general description).
3813
    general description).
3811
 
3814
 
3812
---------------------- Constants for registers: ----------------------
3815
---------------------- Constants for registers: ----------------------
3813
  eax - SF_DEBUG (69)
3816
  eax - SF_DEBUG (69)
3814
  ebx - SSF_RESUME (5)
3817
  ebx - SSF_RESUME (5)
3815
======================================================================
3818
======================================================================
3816
= Fucntion 69, subfunction 6 - read from memory of debugged process. =
3819
= Fucntion 69, subfunction 6 - read from memory of debugged process. =
3817
======================================================================
3820
======================================================================
3818
Parameters:
3821
Parameters:
3819
  * eax = 69 - function number
3822
  * eax = 69 - function number
3820
  * ebx = 6 - subfunction number
3823
  * ebx = 6 - subfunction number
3821
  * ecx = identifier
3824
  * ecx = identifier
3822
  * edx = number of bytes to read
3825
  * edx = number of bytes to read
3823
  * esi = address in the memory of debugged process
3826
  * esi = address in the memory of debugged process
3824
  * edi = pointer to buffer for data
3827
  * edi = pointer to buffer for data
3825
Returned value:
3828
Returned value:
3826
  * eax = -1 at an error (invalid PID or buffer)
3829
  * eax = -1 at an error (invalid PID or buffer)
3827
  * otherwise eax = number of read bytes (possibly, 0,
3830
  * otherwise eax = number of read bytes (possibly, 0,
3828
    if esi is too large)
3831
    if esi is too large)
3829
Remarks:
3832
Remarks:
3830
  * Process must be loaded for debugging (as is shown in
3833
  * Process must be loaded for debugging (as is shown in
3831
    general description).
3834
    general description).
3832
 
3835
 
3833
---------------------- Constants for registers: ----------------------
3836
---------------------- Constants for registers: ----------------------
3834
  eax - SF_DEBUG (69)
3837
  eax - SF_DEBUG (69)
3835
  ebx - SSF_READ_MEMORY (6)
3838
  ebx - SSF_READ_MEMORY (6)
3836
======================================================================
3839
======================================================================
3837
== Function 69, subfunction 7 - write to memory of debugged process. =
3840
== Function 69, subfunction 7 - write to memory of debugged process. =
3838
======================================================================
3841
======================================================================
3839
Parameters:
3842
Parameters:
3840
  * eax = 69 - function number
3843
  * eax = 69 - function number
3841
  * ebx = 7 - subfunction number
3844
  * ebx = 7 - subfunction number
3842
  * ecx = identifier
3845
  * ecx = identifier
3843
  * edx = number of bytes to write
3846
  * edx = number of bytes to write
3844
  * esi = address of memory in debugged process
3847
  * esi = address of memory in debugged process
3845
  * edi = pointer to data
3848
  * edi = pointer to data
3846
Returned value:
3849
Returned value:
3847
  * eax = -1 at an error (invalid PID or buffer)
3850
  * eax = -1 at an error (invalid PID or buffer)
3848
  * otherwise eax = number of written bytes (possibly, 0,
3851
  * otherwise eax = number of written bytes (possibly, 0,
3849
    if esi is too large)
3852
    if esi is too large)
3850
Remarks:
3853
Remarks:
3851
  * Process must be loaded for debugging (as is shown in
3854
  * Process must be loaded for debugging (as is shown in
3852
    general description).
3855
    general description).
3853
 
3856
 
3854
---------------------- Constants for registers: ----------------------
3857
---------------------- Constants for registers: ----------------------
3855
  eax - SF_DEBUG (69)
3858
  eax - SF_DEBUG (69)
3856
  ebx - SSF_WRITE_MEMORY (7)
3859
  ebx - SSF_WRITE_MEMORY (7)
3857
======================================================================
3860
======================================================================
3858
======= Function 69, subfunction 8 - terminate debugged thread. ======
3861
======= Function 69, subfunction 8 - terminate debugged thread. ======
3859
======================================================================
3862
======================================================================
3860
Parameters:
3863
Parameters:
3861
  * eax = 69 - function number
3864
  * eax = 69 - function number
3862
  * ebx = 8 - subfunction number
3865
  * ebx = 8 - subfunction number
3863
  * ecx = identifier
3866
  * ecx = identifier
3864
Returned value:
3867
Returned value:
3865
  * function does not return value
3868
  * function does not return value
3866
Remarks:
3869
Remarks:
3867
  * Process must be loaded for debugging (as is shown in
3870
  * Process must be loaded for debugging (as is shown in
3868
    general description).
3871
    general description).
3869
  * The function is similar to subfunction 2 of function 18
3872
  * The function is similar to subfunction 2 of function 18
3870
    with two differences: it requires first remark and
3873
    with two differences: it requires first remark and
3871
    accepts PID rather than slot number.
3874
    accepts PID rather than slot number.
3872
 
3875
 
3873
---------------------- Constants for registers: ----------------------
3876
---------------------- Constants for registers: ----------------------
3874
  eax - SF_DEBUG (69)
3877
  eax - SF_DEBUG (69)
3875
  ebx - SSF_TERMINATE (8)
3878
  ebx - SSF_TERMINATE (8)
3876
======================================================================
3879
======================================================================
3877
===== Function 69, subfunction 9 - set/clear hardware breakpoint. ====
3880
===== Function 69, subfunction 9 - set/clear hardware breakpoint. ====
3878
======================================================================
3881
======================================================================
3879
Parameters:
3882
Parameters:
3880
  * eax = 69 - function number
3883
  * eax = 69 - function number
3881
  * ebx = 9 - subfunction number
3884
  * ebx = 9 - subfunction number
3882
  * ecx = thread identifier
3885
  * ecx = thread identifier
3883
  * dl = index of breakpoint, from 0 to 3 inclusively
3886
  * dl = index of breakpoint, from 0 to 3 inclusively
3884
  * dh = flags:
3887
  * dh = flags:
3885
    * if high bit is cleared - set breakpoint:
3888
    * if high bit is cleared - set breakpoint:
3886
      * bits 0-1 - condition:
3889
      * bits 0-1 - condition:
3887
        * 00 = breakpoint on execution
3890
        * 00 = breakpoint on execution
3888
        * 01 = breakpoint on read
3891
        * 01 = breakpoint on read
3889
        * 11 = breakpoint on read/write
3892
        * 11 = breakpoint on read/write
3890
      * bits 2-3 - length; for breakpoints on exception it must be
3893
      * bits 2-3 - length; for breakpoints on exception it must be
3891
        00, otherwise one of
3894
        00, otherwise one of
3892
        * 00 = byte
3895
        * 00 = byte
3893
        * 01 = word
3896
        * 01 = word
3894
        * 11 = dword
3897
        * 11 = dword
3895
      * esi = breakpoint address; must be aligned according to
3898
      * esi = breakpoint address; must be aligned according to
3896
        the length (i.e. must be even for word breakpoints,
3899
        the length (i.e. must be even for word breakpoints,
3897
        divisible by 4 for dword)
3900
        divisible by 4 for dword)
3898
    * if high bit is set - clear breakpoint
3901
    * if high bit is set - clear breakpoint
3899
Returned value:
3902
Returned value:
3900
  * eax = 0 - success
3903
  * eax = 0 - success
3901
  * eax = 1 - error in the input data
3904
  * eax = 1 - error in the input data
3902
  * eax = 2 - (reserved, is never returned in the current
3905
  * eax = 2 - (reserved, is never returned in the current
3903
    implementation) a global breakpoint with that index is already set
3906
    implementation) a global breakpoint with that index is already set
3904
Remarks:
3907
Remarks:
3905
  * Process must be loaded for debugging (as is shown in
3908
  * Process must be loaded for debugging (as is shown in
3906
    general description).
3909
    general description).
3907
  * Hardware breakpoints are implemented through DRx-registers of
3910
  * Hardware breakpoints are implemented through DRx-registers of
3908
    the processor, all limitations results from this.
3911
    the processor, all limitations results from this.
3909
  * The function can reinstall the breakpoint, previously set
3912
  * The function can reinstall the breakpoint, previously set
3910
    by it (and it does not inform on this).
3913
    by it (and it does not inform on this).
3911
    Carry on the list of set breakpoints in the debugger.
3914
    Carry on the list of set breakpoints in the debugger.
3912
  * Breakpoints generate debug exception #DB, on which the system
3915
  * Breakpoints generate debug exception #DB, on which the system
3913
    notifies debugger.
3916
    notifies debugger.
3914
  * Breakpoints on write and read/write act after
3917
  * Breakpoints on write and read/write act after
3915
    execution of the caused it instruction.
3918
    execution of the caused it instruction.
3916
 
3919
 
3917
---------------------- Constants for registers: ----------------------
3920
---------------------- Constants for registers: ----------------------
3918
  eax - SF_DEBUG (69)
3921
  eax - SF_DEBUG (69)
3919
  ebx - SSF_DEFINE_BREAKPOINT (9)
3922
  ebx - SSF_DEFINE_BREAKPOINT (9)
3920
======================================================================
3923
======================================================================
3921
==== Function 70 - work with file system with long names support. ====
3924
==== Function 70 - work with file system with long names support. ====
3922
======================================================================
3925
======================================================================
3923
Parameters:
3926
Parameters:
3924
  * eax = 70
3927
  * eax = 70
3925
  * ebx = pointer to the information structure
3928
  * ebx = pointer to the information structure
3926
Returned value:
3929
Returned value:
3927
  * eax = 0 - success; otherwise file system error code
3930
  * eax = 0 - success; otherwise file system error code
3928
  * some subfunctions return value in other registers too
3931
  * some subfunctions return value in other registers too
3929
General format of the information structure:
3932
General format of the information structure:
3930
  * +0: dword: subfunction number
3933
  * +0: dword: subfunction number
3931
  * +4: dword: offset in file or folder
3934
  * +4: dword: offset in file or folder
3932
  * +8: dword: higher part of offset or flags
3935
  * +8: dword: higher part of offset or flags
3933
  * +12 = +0xC: dword: size of data
3936
  * +12 = +0xC: dword: size of data
3934
  * +16 = +0x10: dword: pointer to data
3937
  * +16 = +0x10: dword: pointer to data
3935
  * +20 = +0x14: ?: path - zero terminated string
3938
  * +20 = +0x14: ?: path - zero terminated string
3936
  or
3939
  or
3937
  * +20 = +0x14: byte: 0
3940
  * +20 = +0x14: byte: 0
3938
  * +21 = +0x15: dword: pointer to string
3941
  * +21 = +0x15: dword: pointer to string
3939
Case sensitivity depends on filesystem.
3942
Case sensitivity depends on filesystem.
3940
If a path not begins with '/', it is considered a relative.
3943
If a path not begins with '/', it is considered a relative.
3941
To get or set the current folder, use the sysfunction 30.
3944
To get or set the current folder, use the sysfunction 30.
3942
'../' in the path means a lift by one folder relatively current folder.
3945
'../' in the path means a lift by one folder relatively current folder.
3943
To set the encoding, put at the start of the string a byte with next values:
3946
To set the encoding, put at the start of the string a byte with next values:
3944
  * 1 = cp866
3947
  * 1 = cp866
3945
  * 2 = UTF-16LE
3948
  * 2 = UTF-16LE
3946
  * 3 = UTF-8
3949
  * 3 = UTF-8
3947
  otherwise will be used cp866. In an absolute path
3950
  otherwise will be used cp866. In an absolute path
3948
  you may put this byte after the '/' or put an additional '/' before it.
3951
  you may put this byte after the '/' or put an additional '/' before it.
3949
  Also, you may use the sysfunction 80.
3952
  Also, you may use the sysfunction 80.
3950
Format of an absolute path:
3953
Format of an absolute path:
3951
  /base/number/dir1/dir2/.../dirn/file,
3954
  /base/number/dir1/dir2/.../dirn/file,
3952
where base/number identifies device, on which file is located:
3955
where base/number identifies device, on which file is located:
3953
  * RD/1 = ramdisk
3956
  * RD/1 = ramdisk
3954
  * FD/1 = first floppy drive,
3957
  * FD/1 = first floppy drive,
3955
    FD/2 = second floppy drive
3958
    FD/2 = second floppy drive
3956
  * HD0/x, HD1/x, HD2/x, HD3/x = hard drives accordingly on
3959
  * HD0/x, HD1/x, HD2/x, HD3/x = hard drives accordingly on
3957
    IDE0 (Primary Master), IDE1 (Primary Slave),
3960
    IDE0 (Primary Master), IDE1 (Primary Slave),
3958
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
3961
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
3959
    x - partition number on the selected hard drive, starts from 1
3962
    x - partition number on the selected hard drive, starts from 1
3960
  * CD0/1, CD1/1, CD2/1, CD3/1 = same for cd
3963
  * CD0/1, CD1/1, CD2/1, CD3/1 = same for cd
3961
  * SYS = system folder (encoding inaffected key),
3964
  * SYS = system folder (encoding inaffected key),
3962
    second key may be set by sysfunction 30.3.
3965
    second key may be set by sysfunction 30.3.
3963
Examples:
3966
Examples:
3964
  * '/sys/example.asm',0
3967
  * '/sys/example.asm',0
3965
  * '/rd/1/example.asm',0
3968
  * '/rd/1/example.asm',0
3966
  * '/HD0/1/folder/file.txt',0
3969
  * '/HD0/1/folder/file.txt',0
3967
  * '/hd2/2/pics/tanzania.bmp',0
3970
  * '/hd2/2/pics/tanzania.bmp',0
3968
  * 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
3971
  * 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
3969
 
3972
 
3970
Available subfunctions:
3973
Available subfunctions:
3971
  * subfunction 0 - read file
3974
  * subfunction 0 - read file
3972
  * subfunction 1 - read folder
3975
  * subfunction 1 - read folder
3973
  * subfunction 2 - create/rewrite file
3976
  * subfunction 2 - create/rewrite file
3974
  * subfunction 3 - write to existing file
3977
  * subfunction 3 - write to existing file
3975
  * subfunction 4 - set file size
3978
  * subfunction 4 - set file size
3976
  * subfunction 5 - get attributes of file/folder
3979
  * subfunction 5 - get attributes of file/folder
3977
  * subfunction 6 - set attributes of file/folder
3980
  * subfunction 6 - set attributes of file/folder
3978
  * subfunction 7 - start application
3981
  * subfunction 7 - start application
3979
  * subfunction 8 - delete file/folder
3982
  * subfunction 8 - delete file/folder
3980
  * subfunction 9 - create folder
3983
  * subfunction 9 - create folder
3981
For CD-drives due to hardware limitations only subfunctions
3984
For CD-drives due to hardware limitations only subfunctions
3982
0,1,5 and 7 are available, other subfunctions return error
3985
0,1,5 and 7 are available, other subfunctions return error
3983
with code 2.
3986
with code 2.
3984
At the first call of subfunctions 0,1,5,7 to ATAPI devices
3987
At the first call of subfunctions 0,1,5,7 to ATAPI devices
3985
(CD and DVD) the manual control of tray is locked due to caching
3988
(CD and DVD) the manual control of tray is locked due to caching
3986
drive data. Unlocking is made when subfunction 4 of function 24
3989
drive data. Unlocking is made when subfunction 4 of function 24
3987
is called for corresponding device.
3990
is called for corresponding device.
3988
 
3991
 
3989
---------------------- Constants for registers: ----------------------
3992
---------------------- Constants for registers: ----------------------
3990
  eax - SF_FILE (70)
3993
  eax - SF_FILE (70)
3991
 [ebx] - SSF_READ_FILE (0), SSF_READ_FOLDER (1), SSF_CREATE_FILE (2),
3994
 [ebx] - SSF_READ_FILE (0), SSF_READ_FOLDER (1), SSF_CREATE_FILE (2),
3992
    SSF_WRITE_FILE (3), SSF_SET_END (4), SSF_GET_INFO (5),
3995
    SSF_WRITE_FILE (3), SSF_SET_END (4), SSF_GET_INFO (5),
3993
    SSF_SET_INFO (6), SSF_START_APP (7), SSF_DELETE (8),
3996
    SSF_SET_INFO (6), SSF_START_APP (7), SSF_DELETE (8),
3994
    SSF_CREATE_FOLDER (9)
3997
    SSF_CREATE_FOLDER (9)
3995
======================================================================
3998
======================================================================
3996
=== Function 70, subfunction 0 - read file with long names support. ==
3999
=== Function 70, subfunction 0 - read file with long names support. ==
3997
======================================================================
4000
======================================================================
3998
Parameters:
4001
Parameters:
3999
  * eax = 70 - function number
4002
  * eax = 70 - function number
4000
  * ebx = pointer to the information structure
4003
  * ebx = pointer to the information structure
4001
Format of the information structure:
4004
Format of the information structure:
4002
  * +0: dword: 0 = subfunction number
4005
  * +0: dword: 0 = subfunction number
4003
  * +4: dword: file offset (in bytes)
4006
  * +4: dword: file offset (in bytes)
4004
  * +8: dword: 0 (reserved for high dword of offset)
4007
  * +8: dword: 0 (reserved for high dword of offset)
4005
  * +12 = +0xC: dword: number of bytes to read
4008
  * +12 = +0xC: dword: number of bytes to read
4006
  * +16 = +0x10: dword: pointer to buffer for data
4009
  * +16 = +0x10: dword: pointer to buffer for data
4007
  * +20 = +0x14: path, general rules of names forming
4010
  * +20 = +0x14: path, general rules of names forming
4008
Returned value:
4011
Returned value:
4009
  * eax = 0 - success, otherwise file system error code
4012
  * eax = 0 - success, otherwise file system error code
4010
  * ebx = number of bytes read
4013
  * ebx = number of bytes read
4011
Remarks:
4014
Remarks:
4012
  * If file was ended before last requested block was read,
4015
  * If file was ended before last requested block was read,
4013
    the function will read as many as it can, and after that return
4016
    the function will read as many as it can, and after that return
4014
    eax=6 (EOF).
4017
    eax=6 (EOF).
4015
  * The function does not allow to read folder (returns eax=10,
4018
  * The function does not allow to read folder (returns eax=10,
4016
    access denied).
4019
    access denied).
4017
 
4020
 
4018
---------------------- Constants for registers: ----------------------
4021
---------------------- Constants for registers: ----------------------
4019
  eax - SF_FILE (70)
4022
  eax - SF_FILE (70)
4020
 [ebx] - SSF_READ_FILE (0)
4023
 [ebx] - SSF_READ_FILE (0)
4021
======================================================================
4024
======================================================================
4022
== Function 70, subfunction 1 - read folder with long names support. =
4025
== Function 70, subfunction 1 - read folder with long names support. =
4023
======================================================================
4026
======================================================================
4024
Parameters:
4027
Parameters:
4025
  * eax = 70 - function number
4028
  * eax = 70 - function number
4026
  * ebx = pointer to the information structure
4029
  * ebx = pointer to the information structure
4027
Format of the information structure:
4030
Format of the information structure:
4028
  * +0: dword: 1 = subfunction number
4031
  * +0: dword: 1 = subfunction number
4029
  * +4: dword: index of starting block (beginning from 0)
4032
  * +4: dword: index of starting block (beginning from 0)
4030
  * +8: dword: names encoding:
4033
  * +8: dword: names encoding:
4031
    0 = default
4034
    0 = default
4032
    1 = cp866
4035
    1 = cp866
4033
    2 = UTF-16LE
4036
    2 = UTF-16LE
4034
    3 = UTF-8
4037
    3 = UTF-8
4035
  * +12 = +0xC: dword: number of blocks to read
4038
  * +12 = +0xC: dword: number of blocks to read
4036
  * +16 = +0x10: dword: pointer to buffer for data
4039
  * +16 = +0x10: dword: pointer to buffer for data
4037
  * +20 = +0x14: path, general rules of names forming
4040
  * +20 = +0x14: path, general rules of names forming
4038
Returned value:
4041
Returned value:
4039
  * eax = 0 - success, otherwise file system error code
4042
  * eax = 0 - success, otherwise file system error code
4040
  * ebx = number of file information blocks, written to the buffer
4043
  * ebx = number of file information blocks, written to the buffer
4041
Structure of the buffer:
4044
Structure of the buffer:
4042
  * header (32 bytes)
4045
  * header (32 bytes)
4043
  * block with information on file 1
4046
  * block with information on file 1
4044
  * block with information on file 2
4047
  * block with information on file 2
4045
  * ...
4048
  * ...
4046
Structure of header:
4049
Structure of header:
4047
  * +0: dword: version of structure (current is 1)
4050
  * +0: dword: version of structure (current is 1)
4048
  * +4: dword: number of placed blocks; is not greater than requested
4051
  * +4: dword: number of placed blocks; is not greater than requested
4049
    in the field +12 of information structure; can be less, if
4052
    in the field +12 of information structure; can be less, if
4050
    there are no more files in folder (the same as in ebx)
4053
    there are no more files in folder (the same as in ebx)
4051
  * +8: dword: total number of files in folder
4054
  * +8: dword: total number of files in folder
4052
  * +12 = +0xC: 20*byte: reserved (zeroed)
4055
  * +12 = +0xC: 20*byte: reserved (zeroed)
4053
Structure of block of data for folder entry (BDFE):
4056
Structure of block of data for folder entry (BDFE):
4054
  * +0: dword: attributes of file:
4057
  * +0: dword: attributes of file:
4055
    * bit 0 (mask 1): file is read-only
4058
    * bit 0 (mask 1): file is read-only
4056
    * bit 1 (mask 2): file is hidden
4059
    * bit 1 (mask 2): file is hidden
4057
    * bit 2 (mask 4): file is system
4060
    * bit 2 (mask 4): file is system
4058
    * bit 3 (mask 8): this is the volume label (using by subfunction 5)
4061
    * bit 3 (mask 8): this is the volume label (using by subfunction 5)
4059
    * bit 4 (mask 0x10): this is a folder
4062
    * bit 4 (mask 0x10): this is a folder
4060
    * bit 5 (mask 0x20): file was not archived - many archivation
4063
    * bit 5 (mask 0x20): file was not archived - many archivation
4061
      programs have an option to archive only files with this bit set,
4064
      programs have an option to archive only files with this bit set,
4062
      and after archiving this bit is cleared - it can be useful
4065
      and after archiving this bit is cleared - it can be useful
4063
      for automatically creating of backup-archives as at writing
4066
      for automatically creating of backup-archives as at writing
4064
      this bit is usually set
4067
      this bit is usually set
4065
  * +4: dword: encoding, equals to field +8 in the information structure
4068
  * +4: dword: encoding, equals to field +8 in the information structure
4066
  * +8: 4*byte: time of file creation
4069
  * +8: 4*byte: time of file creation
4067
  * +12 = +0xC: 4*byte: date of file creation
4070
  * +12 = +0xC: 4*byte: date of file creation
4068
  * +16 = +0x10: 4*byte: time of last access (read or write)
4071
  * +16 = +0x10: 4*byte: time of last access (read or write)
4069
  * +20 = +0x14: 4*byte: date of last access
4072
  * +20 = +0x14: 4*byte: date of last access
4070
  * +24 = +0x18: 4*byte: time of last modification
4073
  * +24 = +0x18: 4*byte: time of last modification
4071
  * +28 = +0x1C: 4*byte: date of last modification
4074
  * +28 = +0x1C: 4*byte: date of last modification
4072
  * +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
4075
  * +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
4073
  * +40 = +0x28: name, 264 bytes in cp866, otherwise - 520 bytes.
4076
  * +40 = +0x28: name, 264 bytes in cp866, otherwise - 520 bytes.
4074
Time format:
4077
Time format:
4075
  * +0: byte: seconds
4078
  * +0: byte: seconds
4076
  * +1: byte: minutes
4079
  * +1: byte: minutes
4077
  * +2: byte: hours
4080
  * +2: byte: hours
4078
  * +3: byte: reserved (0)
4081
  * +3: byte: reserved (0)
4079
  * for example, 23.59.59 is written as (in hex) 3B 3B 17 00
4082
  * for example, 23.59.59 is written as (in hex) 3B 3B 17 00
4080
Date format:
4083
Date format:
4081
  * +0: byte: day
4084
  * +0: byte: day
4082
  * +1: byte: month
4085
  * +1: byte: month
4083
  * +2: word: year
4086
  * +2: word: year
4084
  * for example, 25.11.1979 is written as (in hex) 19 0B BB 07
4087
  * for example, 25.11.1979 is written as (in hex) 19 0B BB 07
4085
Remarks:
4088
Remarks:
4086
  * If BDFE contains cp866 name, the length of BDFE is 304 bytes,
4089
  * If BDFE contains cp866 name, the length of BDFE is 304 bytes,
4087
    otherwise - 560 bytes.
4090
    otherwise - 560 bytes.
4088
  * Name string is zero terminated, further data contain garbage.
4091
  * Name string is zero terminated, further data contain garbage.
4089
  * If files in folder were ended before requested number was read,
4092
  * If files in folder were ended before requested number was read,
4090
    the function will read as many as it can, and after that return
4093
    the function will read as many as it can, and after that return
4091
    eax=6 (EOF).
4094
    eax=6 (EOF).
4092
  * Any folder on the disk, except for root, contains two special
4095
  * Any folder on the disk, except for root, contains two special
4093
    entries "." and "..", identifying accordingly the folder itself
4096
    entries "." and "..", identifying accordingly the folder itself
4094
    and the parent folder.
4097
    and the parent folder.
4095
  * The function allows also to read virtual folders "/", "/rd",
4098
  * The function allows also to read virtual folders "/", "/rd",
4096
    "/fd", "/hd[n]", thus attributes of subfolders are set to 0x10,
4099
    "/fd", "/hd[n]", thus attributes of subfolders are set to 0x10,
4097
    and times and dates are zeroed. An alternative way to get the
4100
    and times and dates are zeroed. An alternative way to get the
4098
    equipment information - subfunction 11 of function 18.
4101
    equipment information - subfunction 11 of function 18.
4099
 
4102
 
4100
---------------------- Constants for registers: ----------------------
4103
---------------------- Constants for registers: ----------------------
4101
  eax - SF_FILE (70)
4104
  eax - SF_FILE (70)
4102
 [ebx] - SSF_READ_FOLDER (1)
4105
 [ebx] - SSF_READ_FOLDER (1)
4103
======================================================================
4106
======================================================================
4104
===================== Function 70, subfunction 2 =====================
4107
===================== Function 70, subfunction 2 =====================
4105
============ Create/rewrite file with long names support. ============
4108
============ Create/rewrite file with long names support. ============
4106
======================================================================
4109
======================================================================
4107
Parameters:
4110
Parameters:
4108
  * eax = 70 - function number
4111
  * eax = 70 - function number
4109
  * ebx = pointer to the information structure
4112
  * ebx = pointer to the information structure
4110
Format of the information structure:
4113
Format of the information structure:
4111
  * +0: dword: 2 = subfunction number
4114
  * +0: dword: 2 = subfunction number
4112
  * +4: dword: 0 (reserved)
4115
  * +4: dword: 0 (reserved)
4113
  * +8: dword: 0 (reserved)
4116
  * +8: dword: 0 (reserved)
4114
  * +12 = +0xC: dword: number of bytes to write
4117
  * +12 = +0xC: dword: number of bytes to write
4115
  * +16 = +0x10: dword: pointer to data
4118
  * +16 = +0x10: dword: pointer to data
4116
  * +20 = +0x14: path, general rules of names forming
4119
  * +20 = +0x14: path, general rules of names forming
4117
Returned value:
4120
Returned value:
4118
  * eax = 0 - success, otherwise file system error code
4121
  * eax = 0 - success, otherwise file system error code
4119
  * ebx = number of written bytes (possibly 0)
4122
  * ebx = number of written bytes (possibly 0)
4120
Remarks:
4123
Remarks:
4121
  * If a file with given name did not exist, it is created;
4124
  * If a file with given name did not exist, it is created;
4122
    if it existed, it is rewritten.
4125
    if it existed, it is rewritten.
4123
  * If there is not enough free space on disk, the function will
4126
  * If there is not enough free space on disk, the function will
4124
    write as many as can and then return error code 8.
4127
    write as many as can and then return error code 8.
4125
  * The function is not supported for CD (returns error code 2).
4128
  * The function is not supported for CD (returns error code 2).
4126
 
4129
 
4127
---------------------- Constants for registers: ----------------------
4130
---------------------- Constants for registers: ----------------------
4128
  eax - SF_FILE (70)
4131
  eax - SF_FILE (70)
4129
 [ebx] - SSF_CREATE_FILE (2)
4132
 [ebx] - SSF_CREATE_FILE (2)
4130
======================================================================
4133
======================================================================
4131
===================== Function 70, subfunction 3 =====================
4134
===================== Function 70, subfunction 3 =====================
4132
=========== Write to existing file with long names support. ==========
4135
=========== Write to existing file with long names support. ==========
4133
======================================================================
4136
======================================================================
4134
Parameters:
4137
Parameters:
4135
  * eax = 70 - function number
4138
  * eax = 70 - function number
4136
  * ebx = pointer to the information structure
4139
  * ebx = pointer to the information structure
4137
Format of the information structure:
4140
Format of the information structure:
4138
  * +0: dword: 3 = subfunction number
4141
  * +0: dword: 3 = subfunction number
4139
  * +4: dword: file offset (in bytes)
4142
  * +4: dword: file offset (in bytes)
4140
  * +8: dword: high dword of offset (must be 0 for FAT)
4143
  * +8: dword: high dword of offset (must be 0 for FAT)
4141
  * +12 = +0xC: dword: number of bytes to write
4144
  * +12 = +0xC: dword: number of bytes to write
4142
  * +16 = +0x10: dword: pointer to data
4145
  * +16 = +0x10: dword: pointer to data
4143
  * +20 = +0x14: path, general rules of names forming
4146
  * +20 = +0x14: path, general rules of names forming
4144
Returned value:
4147
Returned value:
4145
  * eax = 0 - success, otherwise file system error code
4148
  * eax = 0 - success, otherwise file system error code
4146
  * ebx = number of written bytes (possibly 0)
4149
  * ebx = number of written bytes (possibly 0)
4147
Remarks:
4150
Remarks:
4148
  * The file must already exist, otherwise function returns eax=5.
4151
  * The file must already exist, otherwise function returns eax=5.
4149
  * The only result of write 0 bytes is update in the file attributes
4152
  * The only result of write 0 bytes is update in the file attributes
4150
    date/time of modification and access to the current date/time.
4153
    date/time of modification and access to the current date/time.
4151
  * If beginning and/or ending position is greater than file size
4154
  * If beginning and/or ending position is greater than file size
4152
    (except for the previous case), the file is expanded to needed
4155
    (except for the previous case), the file is expanded to needed
4153
    size with zero characters.
4156
    size with zero characters.
4154
  * The function is not supported for CD (returns error code 2).
4157
  * The function is not supported for CD (returns error code 2).
4155
 
4158
 
4156
---------------------- Constants for registers: ----------------------
4159
---------------------- Constants for registers: ----------------------
4157
  eax - SF_FILE (70)
4160
  eax - SF_FILE (70)
4158
 [ebx] - SSF_WRITE_FILE (3)
4161
 [ebx] - SSF_WRITE_FILE (3)
4159
======================================================================
4162
======================================================================
4160
============ Function 70, subfunction 4 - set end of file. ===========
4163
============ Function 70, subfunction 4 - set end of file. ===========
4161
======================================================================
4164
======================================================================
4162
Parameters:
4165
Parameters:
4163
  * eax = 70 - function number
4166
  * eax = 70 - function number
4164
  * ebx = pointer to the information structure
4167
  * ebx = pointer to the information structure
4165
Format of the information structure:
4168
Format of the information structure:
4166
  * +0: dword: 4 = subfunction number
4169
  * +0: dword: 4 = subfunction number
4167
  * +4: dword: low dword of new file size
4170
  * +4: dword: low dword of new file size
4168
  * +8: dword: high dword of new file size (must be 0 for FAT)
4171
  * +8: dword: high dword of new file size (must be 0 for FAT)
4169
  * +12 = +0xC: dword: 0 (reserved)
4172
  * +12 = +0xC: dword: 0 (reserved)
4170
  * +16 = +0x10: dword: 0 (reserved)
4173
  * +16 = +0x10: dword: 0 (reserved)
4171
  * +20 = +0x14: path, general rules of names forming
4174
  * +20 = +0x14: path, general rules of names forming
4172
Returned value:
4175
Returned value:
4173
  * eax = 0 - success, otherwise file system error code
4176
  * eax = 0 - success, otherwise file system error code
4174
  * ebx destroyed
4177
  * ebx destroyed
4175
Remarks:
4178
Remarks:
4176
  * If new file size is less than old one, file will be truncated.
4179
  * If new file size is less than old one, file will be truncated.
4177
    If new size is greater than old one, file will be expanded, and if
4180
    If new size is greater than old one, file will be expanded, and if
4178
    size difference is up to 16 MB, new space will be cleared with 0.
4181
    size difference is up to 16 MB, new space will be cleared with 0.
4179
  * If there is not enough free space on disk for expansion, the
4182
  * If there is not enough free space on disk for expansion, the
4180
    function will expand to maximum possible size and then return
4183
    function will expand to maximum possible size and then return
4181
    error code 8.
4184
    error code 8.
4182
  * The function is not supported for CD (returns error code 2).
4185
  * The function is not supported for CD (returns error code 2).
4183
 
4186
 
4184
---------------------- Constants for registers: ----------------------
4187
---------------------- Constants for registers: ----------------------
4185
  eax - SF_FILE (70)
4188
  eax - SF_FILE (70)
4186
 [ebx] - SSF_SET_END (4)
4189
 [ebx] - SSF_SET_END (4)
4187
======================================================================
4190
======================================================================
4188
==== Function 70, subfunction 5 - get information on file/folder. ====
4191
==== Function 70, subfunction 5 - get information on file/folder. ====
4189
======================================================================
4192
======================================================================
4190
Parameters:
4193
Parameters:
4191
  * eax = 70 - function number
4194
  * eax = 70 - function number
4192
  * ebx = pointer to the information structure
4195
  * ebx = pointer to the information structure
4193
Format of the information structure:
4196
Format of the information structure:
4194
  * +0: dword: 5 = subfunction number
4197
  * +0: dword: 5 = subfunction number
4195
  * +4: dword: 0 (reserved)
4198
  * +4: dword: 0 (reserved)
4196
  * +8: dword: 0 or flags (for the root folder)
4199
  * +8: dword: 0 or flags (for the root folder)
4197
  * +12 = +0xC: dword: 0 (reserved)
4200
  * +12 = +0xC: dword: 0 (reserved)
4198
  * +16 = +0x10: dword: pointer to buffer for data (40 bytes)
4201
  * +16 = +0x10: dword: pointer to buffer for data (40 bytes)
4199
  * +20 = +0x14: path, general rules of names forming
4202
  * +20 = +0x14: path, general rules of names forming
4200
Returned value:
4203
Returned value:
4201
  * eax = 0 - success, otherwise file system error code
4204
  * eax = 0 - success, otherwise file system error code
4202
  * ebx destroyed
4205
  * ebx destroyed
4203
Information on file is returned in the BDFE format (block of data
4206
Information on file is returned in the BDFE format (block of data
4204
for folder entry), explained in the description of subfunction 1,
4207
for folder entry), explained in the description of subfunction 1,
4205
but without filename, except the root folder.
4208
but without filename, except the root folder.
4206
Remarks:
4209
Remarks:
4207
  * For the root folder returns the partition size,
4210
  * For the root folder returns the partition size,
4208
    and if encoding byte is non-zero, the volume label.
4211
    and if encoding byte is non-zero, the volume label.
4209
  * For the device returns only the size.
4212
  * For the device returns only the size.
4210
 
4213
 
4211
---------------------- Constants for registers: ----------------------
4214
---------------------- Constants for registers: ----------------------
4212
  eax - SF_FILE (70)
4215
  eax - SF_FILE (70)
4213
 [ebx] - SSF_GET_INFO (5)
4216
 [ebx] - SSF_GET_INFO (5)
4214
======================================================================
4217
======================================================================
4215
===== Function 70, subfunction 6 - set attributes of file/folder. ====
4218
===== Function 70, subfunction 6 - set attributes of file/folder. ====
4216
======================================================================
4219
======================================================================
4217
Parameters:
4220
Parameters:
4218
  * eax = 70 - function number
4221
  * eax = 70 - function number
4219
  * ebx = pointer to the information structure
4222
  * ebx = pointer to the information structure
4220
Format of the information structure:
4223
Format of the information structure:
4221
  * +0: dword: 6 = subfunction number
4224
  * +0: dword: 6 = subfunction number
4222
  * +4: dword: 0 (reserved)
4225
  * +4: dword: 0 (reserved)
4223
  * +8: dword: 0 (reserved)
4226
  * +8: dword: 0 (reserved)
4224
  * +12 = +0xC: dword: 0 (reserved)
4227
  * +12 = +0xC: dword: 0 (reserved)
4225
  * +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
4228
  * +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
4226
  * +20 = +0x14: path, general rules of names forming
4229
  * +20 = +0x14: path, general rules of names forming
4227
Returned value:
4230
Returned value:
4228
  * eax = 0 - success, otherwise file system error code
4231
  * eax = 0 - success, otherwise file system error code
4229
  * ebx destroyed
4232
  * ebx destroyed
4230
File attributes are first 32 bytes in BDFE (block of data
4233
File attributes are first 32 bytes in BDFE (block of data
4231
for folder entry), explained in the description of subfunction 1
4234
for folder entry), explained in the description of subfunction 1
4232
(that is, without name and size of file). Attribute
4235
(that is, without name and size of file). Attribute
4233
file/folder/volume label (bits 3,4 in dword +0) is not changed.
4236
file/folder/volume label (bits 3,4 in dword +0) is not changed.
4234
Byte +4 (name format) is ignored.
4237
Byte +4 (name format) is ignored.
4235
Remarks:
4238
Remarks:
4236
  * The function does not support virtual folders such as /, /rd and
4239
  * The function does not support virtual folders such as /, /rd and
4237
    root folders like /rd/1.
4240
    root folders like /rd/1.
4238
  * The function is not supported for CD (returns error code 2).
4241
  * The function is not supported for CD (returns error code 2).
4239
 
4242
 
4240
---------------------- Constants for registers: ----------------------
4243
---------------------- Constants for registers: ----------------------
4241
  eax - SF_FILE (70)
4244
  eax - SF_FILE (70)
4242
 [ebx] - SSF_SET_INFO (6)
4245
 [ebx] - SSF_SET_INFO (6)
4243
======================================================================
4246
======================================================================
4244
=========== Function 70, subfunction 7 - start application. ==========
4247
=========== Function 70, subfunction 7 - start application. ==========
4245
======================================================================
4248
======================================================================
4246
Parameters:
4249
Parameters:
4247
  * eax = 70 - function number
4250
  * eax = 70 - function number
4248
  * ebx = pointer to the information structure
4251
  * ebx = pointer to the information structure
4249
Format of the information structure:
4252
Format of the information structure:
4250
  * +0: dword: 7 = subfunction number
4253
  * +0: dword: 7 = subfunction number
4251
  * +4: dword: flags field:
4254
  * +4: dword: flags field:
4252
    * bit 0: start process as debugged
4255
    * bit 0: start process as debugged
4253
    * other bits are reserved and must be set to 0
4256
    * other bits are reserved and must be set to 0
4254
  * +8: dword: 0 or pointer to ASCIIZ-string with parameters
4257
  * +8: dword: 0 or pointer to ASCIIZ-string with parameters
4255
  * +12 = +0xC: dword: 0 (reserved)
4258
  * +12 = +0xC: dword: 0 (reserved)
4256
  * +16 = +0x10: dword: 0 (reserved)
4259
  * +16 = +0x10: dword: 0 (reserved)
4257
  * +20 = +0x14: path, general rules of names forming
4260
  * +20 = +0x14: path, general rules of names forming
4258
Returned value:
4261
Returned value:
4259
  * eax > 0 - program is loaded, eax contains PID
4262
  * eax > 0 - program is loaded, eax contains PID
4260
  * eax < 0 - an error has occurred, -eax contains
4263
  * eax < 0 - an error has occurred, -eax contains
4261
    file system error code
4264
    file system error code
4262
  * ebx destroyed
4265
  * ebx destroyed
4263
Remarks:
4266
Remarks:
4264
  * Command line must be terminated by the character with the code 0
4267
  * Command line must be terminated by the character with the code 0
4265
    (ASCIIZ-string); function takes into account either all characters
4268
    (ASCIIZ-string); function takes into account either all characters
4266
    up to terminating zero inclusively or first 256 character
4269
    up to terminating zero inclusively or first 256 character
4267
    regarding what is less.
4270
    regarding what is less.
4268
  * If the process is started as debugged, it is created in
4271
  * If the process is started as debugged, it is created in
4269
    the suspended state; to run use subfunction 5 of function 69.
4272
    the suspended state; to run use subfunction 5 of function 69.
4270
 
4273
 
4271
---------------------- Constants for registers: ----------------------
4274
---------------------- Constants for registers: ----------------------
4272
  eax - SF_FILE (70)
4275
  eax - SF_FILE (70)
4273
 [ebx] - SSF_START_APP (7)
4276
 [ebx] - SSF_START_APP (7)
4274
======================================================================
4277
======================================================================
4275
========== Function 70, subfunction 8 - delete file/folder. ==========
4278
========== Function 70, subfunction 8 - delete file/folder. ==========
4276
======================================================================
4279
======================================================================
4277
Parameters:
4280
Parameters:
4278
  * eax = 70 - function number
4281
  * eax = 70 - function number
4279
  * ebx = pointer to the information structure
4282
  * ebx = pointer to the information structure
4280
Format of the information structure:
4283
Format of the information structure:
4281
  * +0: dword: 8 = subfunction number
4284
  * +0: dword: 8 = subfunction number
4282
  * +4: dword: 0 (reserved)
4285
  * +4: dword: 0 (reserved)
4283
  * +8: dword: 0 (reserved)
4286
  * +8: dword: 0 (reserved)
4284
  * +12 = +0xC: dword: 0 (reserved)
4287
  * +12 = +0xC: dword: 0 (reserved)
4285
  * +16 = +0x10: dword: 0 (reserved)
4288
  * +16 = +0x10: dword: 0 (reserved)
4286
  * +20 = +0x14: path, general rules of names forming
4289
  * +20 = +0x14: path, general rules of names forming
4287
Returned value:
4290
Returned value:
4288
  * eax = 0 - success, otherwise file system error code
4291
  * eax = 0 - success, otherwise file system error code
4289
  * ebx destroyed
4292
  * ebx destroyed
4290
Remarks:
4293
Remarks:
4291
  * The function is not supported for CD (returns error code 2).
4294
  * The function is not supported for CD (returns error code 2).
4292
  * The function can delete only empty folders (attempt to delete
4295
  * The function can delete only empty folders (attempt to delete
4293
    nonempty folder results in error with code 10, "access denied").
4296
    nonempty folder results in error with code 10, "access denied").
4294
 
4297
 
4295
---------------------- Constants for registers: ----------------------
4298
---------------------- Constants for registers: ----------------------
4296
  eax - SF_FILE (70)
4299
  eax - SF_FILE (70)
4297
 [ebx] - SSF_DELETE (8)
4300
 [ebx] - SSF_DELETE (8)
4298
======================================================================
4301
======================================================================
4299
============= Function 70, subfunction 9 - create folder. ============
4302
============= Function 70, subfunction 9 - create folder. ============
4300
======================================================================
4303
======================================================================
4301
Parameters:
4304
Parameters:
4302
  * eax = 70 - function number
4305
  * eax = 70 - function number
4303
  * ebx = pointer to the information structure
4306
  * ebx = pointer to the information structure
4304
Format of the information structure:
4307
Format of the information structure:
4305
  * +0: dword: 9 = subfunction number
4308
  * +0: dword: 9 = subfunction number
4306
  * +4: dword: 0 (reserved)
4309
  * +4: dword: 0 (reserved)
4307
  * +8: dword: 0 (reserved)
4310
  * +8: dword: 0 (reserved)
4308
  * +12 = +0xC: dword: 0 (reserved)
4311
  * +12 = +0xC: dword: 0 (reserved)
4309
  * +16 = +0x10: dword: 0 (reserved)
4312
  * +16 = +0x10: dword: 0 (reserved)
4310
  * +20 = +0x14: path, general rules of names forming
4313
  * +20 = +0x14: path, general rules of names forming
4311
Returned value:
4314
Returned value:
4312
  * eax = 0 - success, otherwise file system error code
4315
  * eax = 0 - success, otherwise file system error code
4313
  * ebx destroyed
4316
  * ebx destroyed
4314
Remarks:
4317
Remarks:
4315
  * The function is not supported for CD (returns error code 2).
4318
  * The function is not supported for CD (returns error code 2).
4316
  * The parent folder must already exist.
4319
  * The parent folder must already exist.
4317
  * If target folder already exists, function returns success (eax=0).
4320
  * If target folder already exists, function returns success (eax=0).
4318
 
4321
 
4319
---------------------- Constants for registers: ----------------------
4322
---------------------- Constants for registers: ----------------------
4320
  eax - SF_FILE (70)
4323
  eax - SF_FILE (70)
4321
 [ebx] - SSF_CREATE_FOLDER (9)
4324
 [ebx] - SSF_CREATE_FOLDER (9)
4322
======================================================================
4325
======================================================================
4323
============= Function 70, subfunction 10 - rename/move. =============
4326
============= Function 70, subfunction 10 - rename/move. =============
4324
======================================================================
4327
======================================================================
4325
Parameters:
4328
Parameters:
4326
  * eax = 70 - function number
4329
  * eax = 70 - function number
4327
  * ebx = pointer to the information structure
4330
  * ebx = pointer to the information structure
4328
Format of the information structure:
4331
Format of the information structure:
4329
  * +0: dword: 10 = subfunction number
4332
  * +0: dword: 10 = subfunction number
4330
  * +4: dword: 0 (reserved)
4333
  * +4: dword: 0 (reserved)
4331
  * +8: dword: 0 (reserved)
4334
  * +8: dword: 0 (reserved)
4332
  * +12 = +0xC: dword: 0 (reserved)
4335
  * +12 = +0xC: dword: 0 (reserved)
4333
  * +16 = +0x10: dword: pointer to the new name/path string
4336
  * +16 = +0x10: dword: pointer to the new name/path string
4334
  * +20 = +0x14: path, general rules of names forming
4337
  * +20 = +0x14: path, general rules of names forming
4335
Returned value:
4338
Returned value:
4336
  * eax = 0 - success, otherwise file system error code
4339
  * eax = 0 - success, otherwise file system error code
4337
  * ebx destroyed
4340
  * ebx destroyed
4338
Remarks:
4341
Remarks:
4339
  * New path forming differs from general rules:
4342
  * New path forming differs from general rules:
4340
    relative path relates to the target's parent folder,
4343
    relative path relates to the target's parent folder,
4341
    absolute path relates to the partition's root folder.
4344
    absolute path relates to the partition's root folder.
4342
======================================================================
4345
======================================================================
4343
================== Function 71 - set window caption ==================
4346
================== Function 71 - set window caption ==================
4344
======================================================================
4347
======================================================================
4345
Parameters:
4348
Parameters:
4346
  * eax = 71 - function number
4349
  * eax = 71 - function number
4347
  * ebx = 1
4350
  * ebx = 1
4348
  * ecx = pointer to zero terminated string,
4351
  * ecx = pointer to zero terminated string,
4349
    the string may start with an encoding byte:
4352
    the string may start with an encoding byte:
4350
    1 = cp866
4353
    1 = cp866
4351
    2 = UTF-16LE
4354
    2 = UTF-16LE
4352
    3 = UTF-8
4355
    3 = UTF-8
4353
  or:
4356
  or:
4354
  * ebx = 2
4357
  * ebx = 2
4355
  * ecx = pointer to zero terminated string
4358
  * ecx = pointer to zero terminated string
4356
  * dl  = string encoding
4359
  * dl  = string encoding
4357
Returned value:
4360
Returned value:
4358
  * function does not return value
4361
  * function does not return value
4359
Remarks:
4362
Remarks:
4360
  * Pass NULL in ecx to remove caption.
4363
  * Pass NULL in ecx to remove caption.
4361
 
4364
 
4362
---------------------- Constants for registers: ----------------------
4365
---------------------- Constants for registers: ----------------------
4363
  eax - SF_SET_CAPTION (71)
4366
  eax - SF_SET_CAPTION (71)
4364
======================================================================
4367
======================================================================
4365
=============== Function 72 - send message to a window. ==============
4368
=============== Function 72 - send message to a window. ==============
4366
======================================================================
4369
======================================================================
4367
 
4370
 
4368
- Subfunction 1 - send message with parameter to the active window. --
4371
- Subfunction 1 - send message with parameter to the active window. --
4369
Parameters:
4372
Parameters:
4370
  * eax = 72 - function number
4373
  * eax = 72 - function number
4371
  * ebx = 1 - subfunction number
4374
  * ebx = 1 - subfunction number
4372
  * ecx = event code: 2 or 3
4375
  * ecx = event code: 2 or 3
4373
  * edx = parameter: key code for ecx=2, button identifier for ecx=3
4376
  * edx = parameter: key code for ecx=2, button identifier for ecx=3
4374
Returned value:
4377
Returned value:
4375
  * eax = 0 - success
4378
  * eax = 0 - success
4376
  * eax = 1 - buffer is full
4379
  * eax = 1 - buffer is full
4377
 
4380
 
4378
---------------------- Constants for registers: ----------------------
4381
---------------------- Constants for registers: ----------------------
4379
  eax - SF_SEND_MESSAGE (72)
4382
  eax - SF_SEND_MESSAGE (72)
4380
======================================================================
4383
======================================================================
4381
===================== Function 73 - blit bitmap  =====================
4384
===================== Function 73 - blit bitmap  =====================
4382
======================================================================
4385
======================================================================
4383
 
4386
 
4384
Parameters:
4387
Parameters:
4385
  * eax = 73 - function number
4388
  * eax = 73 - function number
4386
 
4389
 
4387
  * ebx = ROP and optional flags
4390
  * ebx = ROP and optional flags
4388
     31      30 29 28       6 5  4 3   0
4391
     31      30 29 28       6 5  4 3   0
4389
     [reserved][CR][reserved][T][B][ROP]
4392
     [reserved][CR][reserved][T][B][ROP]
4390
     ROP - raster operation code
4393
     ROP - raster operation code
4391
        0: Copy
4394
        0: Copy
4392
     1-15: reserved
4395
     1-15: reserved
4393
     B   - blit into the background surface
4396
     B   - blit into the background surface
4394
     T   - transparent blit
4397
     T   - transparent blit
4395
     CR  - blit client relative
4398
     CR  - blit client relative
4396
 
4399
 
4397
  * ecx = pointer to the function parameters
4400
  * ecx = pointer to the function parameters
4398
        destination offset and clipping
4401
        destination offset and clipping
4399
     +0 signed dword: destination rectangle X offset from the window
4402
     +0 signed dword: destination rectangle X offset from the window
4400
                      top-left corner
4403
                      top-left corner
4401
     +4 signed dword: destination rectangle Y offset from the window
4404
     +4 signed dword: destination rectangle Y offset from the window
4402
                      top-left corner
4405
                      top-left corner
4403
     +8 dword:        destination rectangle width
4406
     +8 dword:        destination rectangle width
4404
    +12 dword:        destination rectangle height
4407
    +12 dword:        destination rectangle height
4405
 
4408
 
4406
        source offset and clipping
4409
        source offset and clipping
4407
    +16 signed dword: source rectangle X offset from the bitmap
4410
    +16 signed dword: source rectangle X offset from the bitmap
4408
                      top-left corner
4411
                      top-left corner
4409
    +20 signed dword: source rectangle Y offset from the bitmap
4412
    +20 signed dword: source rectangle Y offset from the bitmap
4410
                      top-left corner
4413
                      top-left corner
4411
    +24 dword:        source rectangle width
4414
    +24 dword:        source rectangle width
4412
    +28 dword:        source rectangle height
4415
    +28 dword:        source rectangle height
4413
 
4416
 
4414
    +32: dword: bitmap data - must be 32bpp
4417
    +32: dword: bitmap data - must be 32bpp
4415
    +36: dword: size of the bitmap row in bytes
4418
    +36: dword: size of the bitmap row in bytes
4416
 
4419
 
4417
Returned value:
4420
Returned value:
4418
  * function does not return value
4421
  * function does not return value
4419
 
4422
 
4420
---------------------- Constants for registers: ----------------------
4423
---------------------- Constants for registers: ----------------------
4421
  eax - SF_BLITTER (73)
4424
  eax - SF_BLITTER (73)
4422
======================================================================
4425
======================================================================
4423
= Function 74, Subfunction 255, Get number of active network devices. =
4426
= Function 74, Subfunction 255, Get number of active network devices. =
4424
======================================================================
4427
======================================================================
4425
Parameters:
4428
Parameters:
4426
  * eax = 74 - function number
4429
  * eax = 74 - function number
4427
  * bl = 255 - subfunction number
4430
  * bl = 255 - subfunction number
4428
Returned value:
4431
Returned value:
4429
  * eax = number of active network devices
4432
  * eax = number of active network devices
4430
 
4433
 
4431
---------------------- Constants for registers: ----------------------
4434
---------------------- Constants for registers: ----------------------
4432
  eax - SF_NETWORK_GET (74)
4435
  eax - SF_NETWORK_GET (74)
4433
   bl - SSF_DEVICE_COUNT (255)
4436
   bl - SSF_DEVICE_COUNT (255)
4434
======================================================================
4437
======================================================================
4435
======== Function 74, Subfunction 0, Get network device type. ========
4438
======== Function 74, Subfunction 0, Get network device type. ========
4436
======================================================================
4439
======================================================================
4437
Parameters:
4440
Parameters:
4438
  * eax = 74 - function number
4441
  * eax = 74 - function number
4439
  * bl = 0 - subfunction number
4442
  * bl = 0 - subfunction number
4440
  * bh = device number
4443
  * bh = device number
4441
Returned value:
4444
Returned value:
4442
  * eax = device type number, -1 on error
4445
  * eax = device type number, -1 on error
4443
 
4446
 
4444
---------------------- Constants for registers: ----------------------
4447
---------------------- Constants for registers: ----------------------
4445
  eax - SF_NETWORK_GET (74)
4448
  eax - SF_NETWORK_GET (74)
4446
   bl - SSF_DEVICE_TYPE (0)
4449
   bl - SSF_DEVICE_TYPE (0)
4447
======================================================================
4450
======================================================================
4448
======== Function 74, Subfunction 1, Get network device name. ========
4451
======== Function 74, Subfunction 1, Get network device name. ========
4449
======================================================================
4452
======================================================================
4450
Parameters:
4453
Parameters:
4451
  * eax = 74 - function number
4454
  * eax = 74 - function number
4452
  * bl = 1 - subfunction number
4455
  * bl = 1 - subfunction number
4453
  * bh = device number
4456
  * bh = device number
4454
  * ecx = pointer to 64 byte buffer
4457
  * ecx = pointer to 64 byte buffer
4455
Returned value:
4458
Returned value:
4456
  * eax = -1 on error
4459
  * eax = -1 on error
4457
  * The network device name is written into the buffer, on success
4460
  * The network device name is written into the buffer, on success
4458
 
4461
 
4459
---------------------- Constants for registers: ----------------------
4462
---------------------- Constants for registers: ----------------------
4460
  eax - SF_NETWORK_GET (74)
4463
  eax - SF_NETWORK_GET (74)
4461
   bl - SSF_DEVICE_NAME (1)
4464
   bl - SSF_DEVICE_NAME (1)
4462
======================================================================
4465
======================================================================
4463
========= Function 74, Subfunction 2, Reset network device. ==========
4466
========= Function 74, Subfunction 2, Reset network device. ==========
4464
======================================================================
4467
======================================================================
4465
Parameters:
4468
Parameters:
4466
  * eax = 74 - function number
4469
  * eax = 74 - function number
4467
  * bl = 2 - subfunction number
4470
  * bl = 2 - subfunction number
4468
  * bh = device number
4471
  * bh = device number
4469
Returned value:
4472
Returned value:
4470
  * eax = -1 on error
4473
  * eax = -1 on error
4471
 
4474
 
4472
---------------------- Constants for registers: ----------------------
4475
---------------------- Constants for registers: ----------------------
4473
  eax - SF_NETWORK_GET (74)
4476
  eax - SF_NETWORK_GET (74)
4474
   bl - SSF_RESET_DEVICE (2)
4477
   bl - SSF_RESET_DEVICE (2)
4475
======================================================================
4478
======================================================================
4476
========== Function 74, Subfunction 3, Stop network device. ==========
4479
========== Function 74, Subfunction 3, Stop network device. ==========
4477
======================================================================
4480
======================================================================
4478
Parameters:
4481
Parameters:
4479
  * eax = 74 - function number
4482
  * eax = 74 - function number
4480
  * bl = 3 - subfunction number
4483
  * bl = 3 - subfunction number
4481
  * bh = device number
4484
  * bh = device number
4482
Returned value:
4485
Returned value:
4483
  * eax = -1 on error
4486
  * eax = -1 on error
4484
 
4487
 
4485
---------------------- Constants for registers: ----------------------
4488
---------------------- Constants for registers: ----------------------
4486
  eax - SF_NETWORK_GET (74)
4489
  eax - SF_NETWORK_GET (74)
4487
   bl - SSF_STOP_DEVICE (3)
4490
   bl - SSF_STOP_DEVICE (3)
4488
======================================================================
4491
======================================================================
4489
=========== Function 74, Subfunction 4, Get device pointer. ==========
4492
=========== Function 74, Subfunction 4, Get device pointer. ==========
4490
======================================================================
4493
======================================================================
4491
Parameters:
4494
Parameters:
4492
  * eax = 74 - function number
4495
  * eax = 74 - function number
4493
  * bl = 4 - subfunction number
4496
  * bl = 4 - subfunction number
4494
  * bh = device number
4497
  * bh = device number
4495
Returned value:
4498
Returned value:
4496
  * eax = device pointer, -1 on error
4499
  * eax = device pointer, -1 on error
4497
 
4500
 
4498
---------------------- Constants for registers: ----------------------
4501
---------------------- Constants for registers: ----------------------
4499
  eax - SF_NETWORK_GET (74)
4502
  eax - SF_NETWORK_GET (74)
4500
   bl - SSF_DEVICE_POINTER (4)
4503
   bl - SSF_DEVICE_POINTER (4)
4501
======================================================================
4504
======================================================================
4502
========= Function 74, Subfunction 6, Get packet TX counter. =========
4505
========= Function 74, Subfunction 6, Get packet TX counter. =========
4503
======================================================================
4506
======================================================================
4504
Parameters:
4507
Parameters:
4505
  * eax = 74 - function number
4508
  * eax = 74 - function number
4506
  * bl = 6 - subfunction number
4509
  * bl = 6 - subfunction number
4507
  * bh = device number
4510
  * bh = device number
4508
Returned value:
4511
Returned value:
4509
  * eax = Number of packets sent since device start, -1 on error
4512
  * eax = Number of packets sent since device start, -1 on error
4510
 
4513
 
4511
---------------------- Constants for registers: ----------------------
4514
---------------------- Constants for registers: ----------------------
4512
  eax - SF_NETWORK_GET (74)
4515
  eax - SF_NETWORK_GET (74)
4513
   bl - SSF_TX_PACKET_COUNT (6)
4516
   bl - SSF_TX_PACKET_COUNT (6)
4514
======================================================================
4517
======================================================================
4515
========= Function 74, Subfunction 7, Get packet RX counter. =========
4518
========= Function 74, Subfunction 7, Get packet RX counter. =========
4516
======================================================================
4519
======================================================================
4517
Parameters:
4520
Parameters:
4518
  * eax = 74 - function number
4521
  * eax = 74 - function number
4519
  * bl = 7 - subfunction number
4522
  * bl = 7 - subfunction number
4520
  * bh = device number
4523
  * bh = device number
4521
Returned value:
4524
Returned value:
4522
  * eax = Number of packets received since device start, -1 on error
4525
  * eax = Number of packets received since device start, -1 on error
4523
 
4526
 
4524
---------------------- Constants for registers: ----------------------
4527
---------------------- Constants for registers: ----------------------
4525
  eax - SF_NETWORK_GET (74)
4528
  eax - SF_NETWORK_GET (74)
4526
   bl - SSF_RX_PACKET_COUNT (7)
4529
   bl - SSF_RX_PACKET_COUNT (7)
4527
======================================================================
4530
======================================================================
4528
========== Function 74, Subfunction 8, Get TX byte counter. ==========
4531
========== Function 74, Subfunction 8, Get TX byte counter. ==========
4529
======================================================================
4532
======================================================================
4530
Parameters:
4533
Parameters:
4531
  * eax = 74 - function number
4534
  * eax = 74 - function number
4532
  * bl = 8 - subfunction number
4535
  * bl = 8 - subfunction number
4533
  * bh = device number
4536
  * bh = device number
4534
Returned value:
4537
Returned value:
4535
  * eax = Number of bytes sent since device start (lower dword)
4538
  * eax = Number of bytes sent since device start (lower dword)
4536
          -1 on error
4539
          -1 on error
4537
  * ebx = Number of bytes sent since device start (higher dword)
4540
  * ebx = Number of bytes sent since device start (higher dword)
4538
 
4541
 
4539
---------------------- Constants for registers: ----------------------
4542
---------------------- Constants for registers: ----------------------
4540
  eax - SF_NETWORK_GET (74)
4543
  eax - SF_NETWORK_GET (74)
4541
   bl - SSF_TX_BYTE_COUNT (8)
4544
   bl - SSF_TX_BYTE_COUNT (8)
4542
======================================================================
4545
======================================================================
4543
========== Function 74, Subfunction 9, Get RX byte counter. ==========
4546
========== Function 74, Subfunction 9, Get RX byte counter. ==========
4544
======================================================================
4547
======================================================================
4545
Parameters:
4548
Parameters:
4546
  * eax = 74 - function number
4549
  * eax = 74 - function number
4547
  * bl = 9 - subfunction number
4550
  * bl = 9 - subfunction number
4548
  * bh = device number
4551
  * bh = device number
4549
Returned value:
4552
Returned value:
4550
  * eax = Number of bytes received since device start (lower dword)
4553
  * eax = Number of bytes received since device start (lower dword)
4551
          -1 on error
4554
          -1 on error
4552
  * ebx = Number of bytes received since device start (higher dword)
4555
  * ebx = Number of bytes received since device start (higher dword)
4553
 
4556
 
4554
---------------------- Constants for registers: ----------------------
4557
---------------------- Constants for registers: ----------------------
4555
  eax - SF_NETWORK_GET (74)
4558
  eax - SF_NETWORK_GET (74)
4556
   bl - SSF_RX_BYTE_COUNT (9)
4559
   bl - SSF_RX_BYTE_COUNT (9)
4557
======================================================================
4560
======================================================================
4558
========== Function 74, Subfunction 10, Get link status. =============
4561
========== Function 74, Subfunction 10, Get link status. =============
4559
======================================================================
4562
======================================================================
4560
Parameters:
4563
Parameters:
4561
  * eax = 74 - function number
4564
  * eax = 74 - function number
4562
  * bl = 10 - subfunction number
4565
  * bl = 10 - subfunction number
4563
  * bh = device number
4566
  * bh = device number
4564
Returned value:
4567
Returned value:
4565
  * eax = link status, -1 on error
4568
  * eax = link status, -1 on error
4566
 
4569
 
4567
  Link status:
4570
  Link status:
4568
    ETH_LINK_DOWN   =    0b         ; Link is down
4571
    ETH_LINK_DOWN   =    0b         ; Link is down
4569
    ETH_LINK_UNKNOWN=    1b         ; There could be an active link
4572
    ETH_LINK_UNKNOWN=    1b         ; There could be an active link
4570
    ETH_LINK_FD     =   10b         ; full duplex flag
4573
    ETH_LINK_FD     =   10b         ; full duplex flag
4571
    ETH_LINK_10M    =  100b         ; 10 mbit
4574
    ETH_LINK_10M    =  100b         ; 10 mbit
4572
    ETH_LINK_100M   = 1000b         ; 100 mbit
4575
    ETH_LINK_100M   = 1000b         ; 100 mbit
4573
    ETH_LINK_1G     = 1100b         ; gigabit
4576
    ETH_LINK_1G     = 1100b         ; gigabit
4574
 
4577
 
4575
---------------------- Constants for registers: ----------------------
4578
---------------------- Constants for registers: ----------------------
4576
  eax - SF_NETWORK_GET (74)
4579
  eax - SF_NETWORK_GET (74)
4577
   bl - SSF_LINK_STATUS (10)
4580
   bl - SSF_LINK_STATUS (10)
4578
======================================================================
4581
======================================================================
4579
============== Function 75, Subfunction 0, Open socket. ==============
4582
============== Function 75, Subfunction 0, Open socket. ==============
4580
======================================================================
4583
======================================================================
4581
Parameters:
4584
Parameters:
4582
  * eax = 75 - function number
4585
  * eax = 75 - function number
4583
  * bl = 0 - subfunction number
4586
  * bl = 0 - subfunction number
4584
  * ecx = domain
4587
  * ecx = domain
4585
  * edx = type
4588
  * edx = type
4586
  * esi = protocol
4589
  * esi = protocol
4587
Returned value:
4590
Returned value:
4588
  * eax = socket number, -1 on error
4591
  * eax = socket number, -1 on error
4589
  * ebx = errorcode
4592
  * ebx = errorcode
4590
 
4593
 
4591
---------------------- Constants for registers: ----------------------
4594
---------------------- Constants for registers: ----------------------
4592
  eax - SF_NETWORK_SOCKET (75)
4595
  eax - SF_NETWORK_SOCKET (75)
4593
   bl - SSF_OPEN (0)
4596
   bl - SSF_OPEN (0)
4594
======================================================================
4597
======================================================================
4595
============= Function 75, Subfunction 1, Close socket. ==============
4598
============= Function 75, Subfunction 1, Close socket. ==============
4596
======================================================================
4599
======================================================================
4597
Parameters:
4600
Parameters:
4598
  * eax = 75 - function number
4601
  * eax = 75 - function number
4599
  * bl = 1 - subfunction number
4602
  * bl = 1 - subfunction number
4600
  * ecx = socket number
4603
  * ecx = socket number
4601
Returned value:
4604
Returned value:
4602
  * eax = -1 on error
4605
  * eax = -1 on error
4603
  * ebx = errorcode
4606
  * ebx = errorcode
4604
 
4607
 
4605
---------------------- Constants for registers: ----------------------
4608
---------------------- Constants for registers: ----------------------
4606
  eax - SF_NETWORK_SOCKET (75)
4609
  eax - SF_NETWORK_SOCKET (75)
4607
   bl - SSF_CLOSE (1)
4610
   bl - SSF_CLOSE (1)
4608
======================================================================
4611
======================================================================
4609
================== Function 75, Subfunction 2, Bind. =================
4612
================== Function 75, Subfunction 2, Bind. =================
4610
======================================================================
4613
======================================================================
4611
Parameters:
4614
Parameters:
4612
  * eax = 75 - function number
4615
  * eax = 75 - function number
4613
  * bl = 2 - subfunction number
4616
  * bl = 2 - subfunction number
4614
  * ecx = socket number
4617
  * ecx = socket number
4615
  * edx = pointer to sockaddr structure
4618
  * edx = pointer to sockaddr structure
4616
  * esi = length of sockaddr structure
4619
  * esi = length of sockaddr structure
4617
Format of SockAddr structure:
4620
Format of SockAddr structure:
4618
  * +0: Word: Family
4621
  * +0: Word: Family
4619
  * +2: 14*Byte: Data
4622
  * +2: 14*Byte: Data
4620
Returned value:
4623
Returned value:
4621
  * eax = -1 on error
4624
  * eax = -1 on error
4622
  * ebx = errorcode
4625
  * ebx = errorcode
4623
 
4626
 
4624
---------------------- Constants for registers: ----------------------
4627
---------------------- Constants for registers: ----------------------
4625
  eax - SF_NETWORK_SOCKET (75)
4628
  eax - SF_NETWORK_SOCKET (75)
4626
   bl - SSF_BIND (2)
4629
   bl - SSF_BIND (2)
4627
======================================================================
4630
======================================================================
4628
================= Function 75, Subfunction 3, Listen. ================
4631
================= Function 75, Subfunction 3, Listen. ================
4629
======================================================================
4632
======================================================================
4630
Parameters:
4633
Parameters:
4631
  * eax = 75 - function number
4634
  * eax = 75 - function number
4632
  * bl = 3 - subfunction number
4635
  * bl = 3 - subfunction number
4633
  * ecx = socket number
4636
  * ecx = socket number
4634
  * edx = backlog
4637
  * edx = backlog
4635
Returned value:
4638
Returned value:
4636
  * eax = -1 on error
4639
  * eax = -1 on error
4637
  * ebx = errorcode
4640
  * ebx = errorcode
4638
 
4641
 
4639
---------------------- Constants for registers: ----------------------
4642
---------------------- Constants for registers: ----------------------
4640
  eax - SF_NETWORK_SOCKET (75)
4643
  eax - SF_NETWORK_SOCKET (75)
4641
   bl - SSF_LISTEN (3)
4644
   bl - SSF_LISTEN (3)
4642
======================================================================
4645
======================================================================
4643
================ Function 75, Subfunction 4, Connect. ================
4646
================ Function 75, Subfunction 4, Connect. ================
4644
======================================================================
4647
======================================================================
4645
Parameters:
4648
Parameters:
4646
  * eax = 75 - function number
4649
  * eax = 75 - function number
4647
  * bl = 4 - subfunction number
4650
  * bl = 4 - subfunction number
4648
  * ecx = socket number
4651
  * ecx = socket number
4649
  * edx = pointer to sockaddr structure
4652
  * edx = pointer to sockaddr structure
4650
  * esi = length of sockaddr structure
4653
  * esi = length of sockaddr structure
4651
Format of SockAddr structure:
4654
Format of SockAddr structure:
4652
  * +0: Word: Family
4655
  * +0: Word: Family
4653
  * +2: 14*Byte: Data
4656
  * +2: 14*Byte: Data
4654
Returned value:
4657
Returned value:
4655
  * eax = -1 on error
4658
  * eax = -1 on error
4656
  * ebx = errorcode
4659
  * ebx = errorcode
4657
 
4660
 
4658
---------------------- Constants for registers: ----------------------
4661
---------------------- Constants for registers: ----------------------
4659
  eax - SF_NETWORK_SOCKET (75)
4662
  eax - SF_NETWORK_SOCKET (75)
4660
   bl - SSF_CONNECT (4)
4663
   bl - SSF_CONNECT (4)
4661
======================================================================
4664
======================================================================
4662
================= Function 75, Subfunction 5, Accept. ================
4665
================= Function 75, Subfunction 5, Accept. ================
4663
======================================================================
4666
======================================================================
4664
Parameters:
4667
Parameters:
4665
  * eax = 75 - function number
4668
  * eax = 75 - function number
4666
  * bl = 5 - subfunction number
4669
  * bl = 5 - subfunction number
4667
  * ecx = socket number
4670
  * ecx = socket number
4668
  * edx = pointer to sockaddr structure
4671
  * edx = pointer to sockaddr structure
4669
  * esi = length of sockaddr structure
4672
  * esi = length of sockaddr structure
4670
Format of SockAddr structure:
4673
Format of SockAddr structure:
4671
  * +0: Word: Family
4674
  * +0: Word: Family
4672
  * +2: 14*Byte: Data
4675
  * +2: 14*Byte: Data
4673
Returned value:
4676
Returned value:
4674
  * eax = socket number of accepted socket, -1 on error
4677
  * eax = socket number of accepted socket, -1 on error
4675
  * ebx = errorcode
4678
  * ebx = errorcode
4676
 
4679
 
4677
---------------------- Constants for registers: ----------------------
4680
---------------------- Constants for registers: ----------------------
4678
  eax - SF_NETWORK_SOCKET (75)
4681
  eax - SF_NETWORK_SOCKET (75)
4679
   bl - SSF_ACCEPT (5)
4682
   bl - SSF_ACCEPT (5)
4680
======================================================================
4683
======================================================================
4681
================== Function 75, Subfunction 6, Send. =================
4684
================== Function 75, Subfunction 6, Send. =================
4682
======================================================================
4685
======================================================================
4683
Parameters:
4686
Parameters:
4684
  * eax = 75 - function number
4687
  * eax = 75 - function number
4685
  * bl = 6 - subfunction number
4688
  * bl = 6 - subfunction number
4686
  * ecx = socket number
4689
  * ecx = socket number
4687
  * edx = pointer to buffer
4690
  * edx = pointer to buffer
4688
  * esi = length of buffer
4691
  * esi = length of buffer
4689
  * edi = flags
4692
  * edi = flags
4690
Returned value:
4693
Returned value:
4691
  * eax = number of bytes copied, -1 on error
4694
  * eax = number of bytes copied, -1 on error
4692
  * ebx = errorcode
4695
  * ebx = errorcode
4693
 
4696
 
4694
---------------------- Constants for registers: ----------------------
4697
---------------------- Constants for registers: ----------------------
4695
  eax - SF_NETWORK_SOCKET (75)
4698
  eax - SF_NETWORK_SOCKET (75)
4696
   bl - SSF_SEND (6)
4699
   bl - SSF_SEND (6)
4697
======================================================================
4700
======================================================================
4698
================ Function 75, Subfunction 7, Receive. ================
4701
================ Function 75, Subfunction 7, Receive. ================
4699
======================================================================
4702
======================================================================
4700
Parameters:
4703
Parameters:
4701
  * eax = 75 - function number
4704
  * eax = 75 - function number
4702
  * bl = 7 - subfunction number
4705
  * bl = 7 - subfunction number
4703
  * ecx = socket number
4706
  * ecx = socket number
4704
  * edx = pointer to buffer
4707
  * edx = pointer to buffer
4705
  * esi = length of buffer
4708
  * esi = length of buffer
4706
  * edi = flags
4709
  * edi = flags
4707
Returned value:
4710
Returned value:
4708
  * eax = number of bytes copied, -1 on error
4711
  * eax = number of bytes copied, -1 on error
4709
  * ebx = errorcode
4712
  * ebx = errorcode
4710
 
4713
 
4711
---------------------- Constants for registers: ----------------------
4714
---------------------- Constants for registers: ----------------------
4712
  eax - SF_NETWORK_SOCKET (75)
4715
  eax - SF_NETWORK_SOCKET (75)
4713
   bl - SSF_RECEIVE (7)
4716
   bl - SSF_RECEIVE (7)
4714
======================================================================
4717
======================================================================
4715
=========== Function 75, Subfunction 8, Set socket options. ==========
4718
=========== Function 75, Subfunction 8, Set socket options. ==========
4716
======================================================================
4719
======================================================================
4717
Parameters:
4720
Parameters:
4718
  * eax = 75 - function number
4721
  * eax = 75 - function number
4719
  * bl = 8 - subfunction number
4722
  * bl = 8 - subfunction number
4720
  * ecx = socket number
4723
  * ecx = socket number
4721
  * edx = pointer to optstruct
4724
  * edx = pointer to optstruct
4722
Returned value:
4725
Returned value:
4723
  * eax = -1 on error
4726
  * eax = -1 on error
4724
  * ebx = errorcode
4727
  * ebx = errorcode
4725
Remarks:
4728
Remarks:
4726
 
4729
 
4727
  Optstruct:
4730
  Optstruct:
4728
    dd level
4731
    dd level
4729
    dd optionname
4732
    dd optionname
4730
    dd optlength
4733
    dd optlength
4731
    db options...
4734
    db options...
4732
 
4735
 
4733
---------------------- Constants for registers: ----------------------
4736
---------------------- Constants for registers: ----------------------
4734
  eax - SF_NETWORK_SOCKET (75)
4737
  eax - SF_NETWORK_SOCKET (75)
4735
   bl - SSF_SET_OPTIONS (8)
4738
   bl - SSF_SET_OPTIONS (8)
4736
======================================================================
4739
======================================================================
4737
=========== Function 75, Subfunction 9, Get socket options. ==========
4740
=========== Function 75, Subfunction 9, Get socket options. ==========
4738
======================================================================
4741
======================================================================
4739
Parameters:
4742
Parameters:
4740
  * eax = 75 - function number
4743
  * eax = 75 - function number
4741
  * bl = 9 - subfunction number
4744
  * bl = 9 - subfunction number
4742
  * ecx = socket number
4745
  * ecx = socket number
4743
  * edx = pointer to optstruct
4746
  * edx = pointer to optstruct
4744
Returned value:
4747
Returned value:
4745
  * eax = -1 on error
4748
  * eax = -1 on error
4746
  * ebx = errorcode
4749
  * ebx = errorcode
4747
Remarks:
4750
Remarks:
4748
 
4751
 
4749
  Optstruct:
4752
  Optstruct:
4750
    dd level
4753
    dd level
4751
    dd optionname
4754
    dd optionname
4752
    dd optlength
4755
    dd optlength
4753
    db options...
4756
    db options...
4754
 
4757
 
4755
---------------------- Constants for registers: ----------------------
4758
---------------------- Constants for registers: ----------------------
4756
  eax - SF_NETWORK_SOCKET (75)
4759
  eax - SF_NETWORK_SOCKET (75)
4757
   bl - SSF_GET_OPTIONS (9)
4760
   bl - SSF_GET_OPTIONS (9)
4758
======================================================================
4761
======================================================================
4759
============ Function 75, Subfunction 10, Get socketpair. ============
4762
============ Function 75, Subfunction 10, Get socketpair. ============
4760
======================================================================
4763
======================================================================
4761
Parameters:
4764
Parameters:
4762
  * eax = 75 - function number
4765
  * eax = 75 - function number
4763
  * bl = 10 - subfunction number
4766
  * bl = 10 - subfunction number
4764
Returned value:
4767
Returned value:
4765
  * eax = socketnum1, -1 on error
4768
  * eax = socketnum1, -1 on error
4766
  * ebx = socketnum2, errorcode on error
4769
  * ebx = socketnum2, errorcode on error
4767
 
4770
 
4768
---------------------- Constants for registers: ----------------------
4771
---------------------- Constants for registers: ----------------------
4769
  eax - SF_NETWORK_SOCKET (75)
4772
  eax - SF_NETWORK_SOCKET (75)
4770
   bl - SSF_GET_PAIR (10)
4773
   bl - SSF_GET_PAIR (10)
4771
======================================================================
4774
======================================================================
4772
============ Function 76, Network options and statistics. ============
4775
============ Function 76, Network options and statistics. ============
4773
======================================================================
4776
======================================================================
4774
Parameters:
4777
Parameters:
4775
  * eax = 76 - function number
4778
  * eax = 76 - function number
4776
  * high half of ebx = protocol number
4779
  * high half of ebx = protocol number
4777
  * bh = device number
4780
  * bh = device number
4778
  * bl = subfunction number
4781
  * bl = subfunction number
4779
 
4782
 
4780
======================================================================
4783
======================================================================
4781
==== Function 76, Protocol 0 - Ethernet, Subfunction 0, Read MAC. ====
4784
==== Function 76, Protocol 0 - Ethernet, Subfunction 0, Read MAC. ====
4782
======================================================================
4785
======================================================================
4783
Parameters:
4786
Parameters:
4784
  * eax = 76 - function number
4787
  * eax = 76 - function number
4785
  * high half of ebx = 0 (Ethernet)
4788
  * high half of ebx = 0 (Ethernet)
4786
  * bh = device number
4789
  * bh = device number
4787
  * bl = 0 (Read MAC)
4790
  * bl = 0 (Read MAC)
4788
Returned value:
4791
Returned value:
4789
  * eax = -1 on error, otherwise lower bits of MAC
4792
  * eax = -1 on error, otherwise lower bits of MAC
4790
  * bx = upper bits of MAC
4793
  * bx = upper bits of MAC
4791
 
4794
 
4792
======================================================================
4795
======================================================================
4793
= Function 76, Protocol 1 - IPv4, Subfunction 0, Read # Packets sent =
4796
= Function 76, Protocol 1 - IPv4, Subfunction 0, Read # Packets sent =
4794
======================================================================
4797
======================================================================
4795
Parameters:
4798
Parameters:
4796
  * eax = 76 - function number
4799
  * eax = 76 - function number
4797
  * high half of ebx = 1 (IPv4)
4800
  * high half of ebx = 1 (IPv4)
4798
  * bh = device number
4801
  * bh = device number
4799
  * bl = 0 (Read # packets sent)
4802
  * bl = 0 (Read # packets sent)
4800
Returned value:
4803
Returned value:
4801
  * eax = number of packets sent (-1 on error)
4804
  * eax = number of packets sent (-1 on error)
4802
 
4805
 
4803
======================================================================
4806
======================================================================
4804
= Function 76, Protocol 1 - IPv4, Subfunction 1, Read # Packets rcvd =
4807
= Function 76, Protocol 1 - IPv4, Subfunction 1, Read # Packets rcvd =
4805
======================================================================
4808
======================================================================
4806
Parameters:
4809
Parameters:
4807
  * eax = 76 - function number
4810
  * eax = 76 - function number
4808
  * high half of ebx = 1 (IPv4)
4811
  * high half of ebx = 1 (IPv4)
4809
  * bh = device number
4812
  * bh = device number
4810
  * bl = 1 (Read # packets received)
4813
  * bl = 1 (Read # packets received)
4811
Returned value:
4814
Returned value:
4812
  * eax = number of packets received (-1 on error)
4815
  * eax = number of packets received (-1 on error)
4813
 
4816
 
4814
======================================================================
4817
======================================================================
4815
=== Function 76, Protocol 1 - IPv4, Subfunction 2, Read IP address ===
4818
=== Function 76, Protocol 1 - IPv4, Subfunction 2, Read IP address ===
4816
======================================================================
4819
======================================================================
4817
Parameters:
4820
Parameters:
4818
  * eax = 76 - function number
4821
  * eax = 76 - function number
4819
  * high half of ebx = 1 (IPv4)
4822
  * high half of ebx = 1 (IPv4)
4820
  * bh = device number
4823
  * bh = device number
4821
  * bl = 2 (Read IP address)
4824
  * bl = 2 (Read IP address)
4822
Returned value:
4825
Returned value:
4823
  * eax = IP address (-1 on error)
4826
  * eax = IP address (-1 on error)
4824
 
4827
 
4825
======================================================================
4828
======================================================================
4826
=== Function 76, Protocol 1 - IPv4, Subfunction 3, Set IP address ====
4829
=== Function 76, Protocol 1 - IPv4, Subfunction 3, Set IP address ====
4827
======================================================================
4830
======================================================================
4828
Parameters:
4831
Parameters:
4829
  * eax = 76 - function number
4832
  * eax = 76 - function number
4830
  * high half of ebx = 1 (IPv4)
4833
  * high half of ebx = 1 (IPv4)
4831
  * bh = device number
4834
  * bh = device number
4832
  * bl = 3 (Set IP address)
4835
  * bl = 3 (Set IP address)
4833
  * ecx = IP address
4836
  * ecx = IP address
4834
Returned value:
4837
Returned value:
4835
  * eax = -1 on error
4838
  * eax = -1 on error
4836
 
4839
 
4837
======================================================================
4840
======================================================================
4838
== Function 76, Protocol 1 - IPv4, Subfunction 4, Read DNS address ===
4841
== Function 76, Protocol 1 - IPv4, Subfunction 4, Read DNS address ===
4839
======================================================================
4842
======================================================================
4840
Parameters:
4843
Parameters:
4841
  * eax = 76 - function number
4844
  * eax = 76 - function number
4842
  * high half of ebx = 1 (IPv4)
4845
  * high half of ebx = 1 (IPv4)
4843
  * bh = device number
4846
  * bh = device number
4844
  * bl = 4 (Read DNS server IP address)
4847
  * bl = 4 (Read DNS server IP address)
4845
Returned value:
4848
Returned value:
4846
  * eax = DNS server IP address (-1 on error)
4849
  * eax = DNS server IP address (-1 on error)
4847
 
4850
 
4848
======================================================================
4851
======================================================================
4849
=== Function 76, Protocol 1 - IPv4, Subfunction 5, Set DNS address ===
4852
=== Function 76, Protocol 1 - IPv4, Subfunction 5, Set DNS address ===
4850
======================================================================
4853
======================================================================
4851
Parameters:
4854
Parameters:
4852
  * eax = 76 - function number
4855
  * eax = 76 - function number
4853
  * high half of ebx = 1 (IPv4)
4856
  * high half of ebx = 1 (IPv4)
4854
  * bh = device number
4857
  * bh = device number
4855
  * bl = 5 (Set DNS address)
4858
  * bl = 5 (Set DNS address)
4856
  * ecx = DNS server IP address
4859
  * ecx = DNS server IP address
4857
Returned value:
4860
Returned value:
4858
  * eax = -1 on error
4861
  * eax = -1 on error
4859
 
4862
 
4860
======================================================================
4863
======================================================================
4861
== Function 76, Protocol 1 - IPv4, Subfunction 6, Read subnet mask ===
4864
== Function 76, Protocol 1 - IPv4, Subfunction 6, Read subnet mask ===
4862
======================================================================
4865
======================================================================
4863
Parameters:
4866
Parameters:
4864
  * eax = 76 - function number
4867
  * eax = 76 - function number
4865
  * high half of ebx = 1 (IPv4)
4868
  * high half of ebx = 1 (IPv4)
4866
  * bh = device number
4869
  * bh = device number
4867
  * bl = 6 (Read subnet mask)
4870
  * bl = 6 (Read subnet mask)
4868
Returned value:
4871
Returned value:
4869
  * eax = subnet mask (-1 on error)
4872
  * eax = subnet mask (-1 on error)
4870
 
4873
 
4871
======================================================================
4874
======================================================================
4872
=== Function 76, Protocol 1 - IPv4, Subfunction 7, Set subnet mask ===
4875
=== Function 76, Protocol 1 - IPv4, Subfunction 7, Set subnet mask ===
4873
======================================================================
4876
======================================================================
4874
Parameters:
4877
Parameters:
4875
  * eax = 76 - function number
4878
  * eax = 76 - function number
4876
  * high half of ebx = 1 (IPv4)
4879
  * high half of ebx = 1 (IPv4)
4877
  * bh = device number
4880
  * bh = device number
4878
  * bl = 7 (Set subnet mask)
4881
  * bl = 7 (Set subnet mask)
4879
  * ecx = subnet mask
4882
  * ecx = subnet mask
4880
Returned value:
4883
Returned value:
4881
  * eax = -1 on error
4884
  * eax = -1 on error
4882
 
4885
 
4883
======================================================================
4886
======================================================================
4884
===== Function 76, Protocol 1 - IPv4, Subfunction 8, Read gateway ====
4887
===== Function 76, Protocol 1 - IPv4, Subfunction 8, Read gateway ====
4885
======================================================================
4888
======================================================================
4886
Parameters:
4889
Parameters:
4887
  * eax = 76 - function number
4890
  * eax = 76 - function number
4888
  * high half of ebx = 1 (IPv4)
4891
  * high half of ebx = 1 (IPv4)
4889
  * bh = device number
4892
  * bh = device number
4890
  * bl = 8 (Read gateway IP address)
4893
  * bl = 8 (Read gateway IP address)
4891
Returned value:
4894
Returned value:
4892
  * eax = gateway IP address (-1 on error)
4895
  * eax = gateway IP address (-1 on error)
4893
 
4896
 
4894
======================================================================
4897
======================================================================
4895
===== Function 76, Protocol 1 - IPv4, Subfunction 9, Set gateway =====
4898
===== Function 76, Protocol 1 - IPv4, Subfunction 9, Set gateway =====
4896
======================================================================
4899
======================================================================
4897
Parameters:
4900
Parameters:
4898
  * eax = 76 - function number
4901
  * eax = 76 - function number
4899
  * high half of ebx = 1 (IPv4)
4902
  * high half of ebx = 1 (IPv4)
4900
  * bh = device number
4903
  * bh = device number
4901
  * bl = 9 (Set getway address)
4904
  * bl = 9 (Set getway address)
4902
  * ecx = gateway IP address
4905
  * ecx = gateway IP address
4903
Returned value:
4906
Returned value:
4904
  * eax = -1 on error
4907
  * eax = -1 on error
4905
 
4908
 
4906
======================================================================
4909
======================================================================
4907
= Function 76, Protocol 2 - ICMP, Subfunction 0, Read # Packets sent =
4910
= Function 76, Protocol 2 - ICMP, Subfunction 0, Read # Packets sent =
4908
======================================================================
4911
======================================================================
4909
Parameters:
4912
Parameters:
4910
  * eax = 76 - function number
4913
  * eax = 76 - function number
4911
  * high half of ebx = 2 (ICMP)
4914
  * high half of ebx = 2 (ICMP)
4912
  * bh = device number
4915
  * bh = device number
4913
  * bl = 0 (Read # packets sent)
4916
  * bl = 0 (Read # packets sent)
4914
Returned value:
4917
Returned value:
4915
  * eax = number of packets sent (-1 on error)
4918
  * eax = number of packets sent (-1 on error)
4916
 
4919
 
4917
======================================================================
4920
======================================================================
4918
= Function 76, Protocol 2 - ICMP, Subfunction 1, Read # Packets rcvd =
4921
= Function 76, Protocol 2 - ICMP, Subfunction 1, Read # Packets rcvd =
4919
======================================================================
4922
======================================================================
4920
Parameters:
4923
Parameters:
4921
  * eax = 76 - function number
4924
  * eax = 76 - function number
4922
  * high half of ebx = 2 (ICMP)
4925
  * high half of ebx = 2 (ICMP)
4923
  * bh = device number
4926
  * bh = device number
4924
  * bl = 1 (Read # packets received)
4927
  * bl = 1 (Read # packets received)
4925
Returned value:
4928
Returned value:
4926
  * eax = number of packets received (-1 on error)
4929
  * eax = number of packets received (-1 on error)
4927
 
4930
 
4928
======================================================================
4931
======================================================================
4929
= Function 76, Protocol 3 - UDP, Subfunction 0, Read # Packets sent ==
4932
= Function 76, Protocol 3 - UDP, Subfunction 0, Read # Packets sent ==
4930
======================================================================
4933
======================================================================
4931
Parameters:
4934
Parameters:
4932
  * eax = 76 - function number
4935
  * eax = 76 - function number
4933
  * high half of ebx = 3 (UDP)
4936
  * high half of ebx = 3 (UDP)
4934
  * bh = device number
4937
  * bh = device number
4935
  * bl = 0 (Read # packets sent)
4938
  * bl = 0 (Read # packets sent)
4936
Returned value:
4939
Returned value:
4937
  * eax = number of packets sent (-1 on error)
4940
  * eax = number of packets sent (-1 on error)
4938
 
4941
 
4939
======================================================================
4942
======================================================================
4940
= Function 76, Protocol 3 - UDP, Subfunction 1, Read # Packets rcvd ==
4943
= Function 76, Protocol 3 - UDP, Subfunction 1, Read # Packets rcvd ==
4941
======================================================================
4944
======================================================================
4942
Parameters:
4945
Parameters:
4943
  * eax = 76 - function number
4946
  * eax = 76 - function number
4944
  * high half of ebx = 3 (UDP)
4947
  * high half of ebx = 3 (UDP)
4945
  * bh = device number
4948
  * bh = device number
4946
  * bl = 1 (Read # packets received)
4949
  * bl = 1 (Read # packets received)
4947
Returned value:
4950
Returned value:
4948
  * eax = number of packets received (-1 on error)
4951
  * eax = number of packets received (-1 on error)
4949
 
4952
 
4950
======================================================================
4953
======================================================================
4951
= Function 76, Protocol 4 - TCP, Subfunction 0, Read # Packets sent ==
4954
= Function 76, Protocol 4 - TCP, Subfunction 0, Read # Packets sent ==
4952
======================================================================
4955
======================================================================
4953
Parameters:
4956
Parameters:
4954
  * eax = 76 - function number
4957
  * eax = 76 - function number
4955
  * high half of ebx = 4 (TCP)
4958
  * high half of ebx = 4 (TCP)
4956
  * bh = device number
4959
  * bh = device number
4957
  * bl = 0 (Read # packets sent)
4960
  * bl = 0 (Read # packets sent)
4958
Returned value:
4961
Returned value:
4959
  * eax = number of packets sent (-1 on error)
4962
  * eax = number of packets sent (-1 on error)
4960
 
4963
 
4961
======================================================================
4964
======================================================================
4962
= Function 76, Protocol 4 - TCP, Subfunction 1, Read # Packets rcvd ==
4965
= Function 76, Protocol 4 - TCP, Subfunction 1, Read # Packets rcvd ==
4963
======================================================================
4966
======================================================================
4964
Parameters:
4967
Parameters:
4965
  * eax = 76 - function number
4968
  * eax = 76 - function number
4966
  * high half of ebx = 4 (TCP)
4969
  * high half of ebx = 4 (TCP)
4967
  * bh = device number
4970
  * bh = device number
4968
  * bl = 1 (Read # packets received)
4971
  * bl = 1 (Read # packets received)
4969
Returned value:
4972
Returned value:
4970
  * eax = number of packets received (-1 on error)
4973
  * eax = number of packets received (-1 on error)
4971
 
4974
 
4972
======================================================================
4975
======================================================================
4973
= Function 76, Protocol 5 - ARP, Subfunction 0, Read # Packets sent ==
4976
= Function 76, Protocol 5 - ARP, Subfunction 0, Read # Packets sent ==
4974
======================================================================
4977
======================================================================
4975
Parameters:
4978
Parameters:
4976
  * eax = 76 - function number
4979
  * eax = 76 - function number
4977
  * high half of ebx = 5 (ARP)
4980
  * high half of ebx = 5 (ARP)
4978
  * bh = device number
4981
  * bh = device number
4979
  * bl = 0 (Read # packets sent)
4982
  * bl = 0 (Read # packets sent)
4980
Returned value:
4983
Returned value:
4981
  * eax = number of packets sent (-1 on error)
4984
  * eax = number of packets sent (-1 on error)
4982
 
4985
 
4983
======================================================================
4986
======================================================================
4984
= Function 76, Protocol 5 - ARP, Subfunction 1, Read # Packets rcvd ==
4987
= Function 76, Protocol 5 - ARP, Subfunction 1, Read # Packets rcvd ==
4985
======================================================================
4988
======================================================================
4986
Parameters:
4989
Parameters:
4987
  * eax = 76 - function number
4990
  * eax = 76 - function number
4988
  * high half of ebx = 5 (ARP)
4991
  * high half of ebx = 5 (ARP)
4989
  * bh = device number
4992
  * bh = device number
4990
  * bl = 1 (Read # packets received)
4993
  * bl = 1 (Read # packets received)
4991
Returned value:
4994
Returned value:
4992
  * eax = number of packets received (-1 on error)
4995
  * eax = number of packets received (-1 on error)
4993
 
4996
 
4994
======================================================================
4997
======================================================================
4995
== Function 76, Protocol 5 - ARP, Subfunction 2, Read # ARP entries ==
4998
== Function 76, Protocol 5 - ARP, Subfunction 2, Read # ARP entries ==
4996
======================================================================
4999
======================================================================
4997
Parameters:
5000
Parameters:
4998
  * eax = 76 - function number
5001
  * eax = 76 - function number
4999
  * high half of ebx = 5 (ARP)
5002
  * high half of ebx = 5 (ARP)
5000
  * bh = device number
5003
  * bh = device number
5001
  * bl = 2 (Read # current entries in the ARP table)
5004
  * bl = 2 (Read # current entries in the ARP table)
5002
Returned value:
5005
Returned value:
5003
  * eax = number of entries (-1 on error)
5006
  * eax = number of entries (-1 on error)
5004
 
5007
 
5005
======================================================================
5008
======================================================================
5006
==== Function 76, Protocol 5 - ARP, Subfunction 3, Read ARP entry ====
5009
==== Function 76, Protocol 5 - ARP, Subfunction 3, Read ARP entry ====
5007
======================================================================
5010
======================================================================
5008
Parameters:
5011
Parameters:
5009
  * eax = 76 - function number
5012
  * eax = 76 - function number
5010
  * high half of ebx = 5 (ARP)
5013
  * high half of ebx = 5 (ARP)
5011
  * bh = device number
5014
  * bh = device number
5012
  * bl = 3 (Read ARP entry)
5015
  * bl = 3 (Read ARP entry)
5013
  * ecx = ARP entry number (0 based)
5016
  * ecx = ARP entry number (0 based)
5014
  * edi = ptr to buffer where ARP entry will be written
5017
  * edi = ptr to buffer where ARP entry will be written
5015
Returned value:
5018
Returned value:
5016
  * eax = -1 on error
5019
  * eax = -1 on error
5017
Remarks:
5020
Remarks:
5018
  * ARP_entry struct is defined in ARP.inc in kernel and currently
5021
  * ARP_entry struct is defined in ARP.inc in kernel and currently
5019
    looks like this:
5022
    looks like this:
5020
struct  ARP_entry
5023
struct  ARP_entry
5021
        IP              dd ?
5024
        IP              dd ?
5022
        MAC             dp ?
5025
        MAC             dp ?
5023
        Status          dw ?
5026
        Status          dw ?
5024
        TTL             dw ?
5027
        TTL             dw ?
5025
ends
5028
ends
5026
 
5029
 
5027
======================================================================
5030
======================================================================
5028
===== Function 76, Protocol 5 - ARP, Subfunction 4, Add ARP entry ====
5031
===== Function 76, Protocol 5 - ARP, Subfunction 4, Add ARP entry ====
5029
======================================================================
5032
======================================================================
5030
Parameters:
5033
Parameters:
5031
  * eax = 76 - function number
5034
  * eax = 76 - function number
5032
  * high half of ebx = 5 (ARP)
5035
  * high half of ebx = 5 (ARP)
5033
  * bh = device number
5036
  * bh = device number
5034
  * bl = 4 (Add ARP entry)
5037
  * bl = 4 (Add ARP entry)
5035
  * esi = ptr to buffer holding ARP entry
5038
  * esi = ptr to buffer holding ARP entry
5036
Returned value:
5039
Returned value:
5037
  * eax = -1 on error
5040
  * eax = -1 on error
5038
Remarks:
5041
Remarks:
5039
  * See previous function for details on ARP entry.
5042
  * See previous function for details on ARP entry.
5040
 
5043
 
5041
======================================================================
5044
======================================================================
5042
=== Function 76, Protocol 5 - ARP, Subfunction 5, Remove ARP entry ===
5045
=== Function 76, Protocol 5 - ARP, Subfunction 5, Remove ARP entry ===
5043
======================================================================
5046
======================================================================
5044
Parameters:
5047
Parameters:
5045
  * eax = 76 - function number
5048
  * eax = 76 - function number
5046
  * high half of ebx = 5 (ARP)
5049
  * high half of ebx = 5 (ARP)
5047
  * bh = device number
5050
  * bh = device number
5048
  * bl = 5 (Remove ARP entry)
5051
  * bl = 5 (Remove ARP entry)
5049
  * ecx = ARP entry number (0 based), use -1 to clear whole ARP table.
5052
  * ecx = ARP entry number (0 based), use -1 to clear whole ARP table.
5050
Returned value:
5053
Returned value:
5051
  * eax = -1 on error
5054
  * eax = -1 on error
5052
 
5055
 
5053
======================================================================
5056
======================================================================
5054
=== Function 76, Protocol 5 - ARP, Subfunction 6, Send ARP announce ==
5057
=== Function 76, Protocol 5 - ARP, Subfunction 6, Send ARP announce ==
5055
======================================================================
5058
======================================================================
5056
Parameters:
5059
Parameters:
5057
  * eax = 76 - function number
5060
  * eax = 76 - function number
5058
  * high half of ebx = 5 (ARP)
5061
  * high half of ebx = 5 (ARP)
5059
  * bh = device number
5062
  * bh = device number
5060
  * bl = 6 (Send ARP announce)
5063
  * bl = 6 (Send ARP announce)
5061
Returned value:
5064
Returned value:
5062
  * eax = -1 on error
5065
  * eax = -1 on error
5063
 
5066
 
5064
======================================================================
5067
======================================================================
5065
=== Function 76, Protocol 5 - ARP, Subfunction 7, Read # conflicts ===
5068
=== Function 76, Protocol 5 - ARP, Subfunction 7, Read # conflicts ===
5066
======================================================================
5069
======================================================================
5067
Parameters:
5070
Parameters:
5068
  * eax = 76 - function number
5071
  * eax = 76 - function number
5069
  * high half of ebx = 5 (ARP)
5072
  * high half of ebx = 5 (ARP)
5070
  * bh = device number
5073
  * bh = device number
5071
  * bl = 7 (Read # IP address conflicts that have occured)
5074
  * bl = 7 (Read # IP address conflicts that have occured)
5072
Returned value:
5075
Returned value:
5073
  * eax = # IP address conflicts (-1 on error)
5076
  * eax = # IP address conflicts (-1 on error)
5074
 
5077
 
5075
---------------------- Constants for registers: ----------------------
5078
---------------------- Constants for registers: ----------------------
5076
  eax - SF_NETWORK_PROTOCOL (76)
5079
  eax - SF_NETWORK_PROTOCOL (76)
5077
======================================================================
5080
======================================================================
5078
========== Function 77, Subfunction 0, Create futex object ===========
5081
========== Function 77, Subfunction 0, Create futex object ===========
5079
======================================================================
5082
======================================================================
5080
Parameters:
5083
Parameters:
5081
  * eax = 77 - function number
5084
  * eax = 77 - function number
5082
  * ebx = 0 - subfunction number
5085
  * ebx = 0 - subfunction number
5083
  * ecx = pointer to futex dword
5086
  * ecx = pointer to futex dword
5084
Returned value:
5087
Returned value:
5085
  * eax = futex handle, 0 on error
5088
  * eax = futex handle, 0 on error
5086
Remarks:
5089
Remarks:
5087
  * Use subfunction 1 to destroy the futex.
5090
  * Use subfunction 1 to destroy the futex.
5088
    The kernel destroys the futexes automatically when the process
5091
    The kernel destroys the futexes automatically when the process
5089
    terminates.
5092
    terminates.
5090
 
5093
 
5091
---------------------- Constants for registers: ----------------------
5094
---------------------- Constants for registers: ----------------------
5092
  eax - SF_FUTEX (77)
5095
  eax - SF_FUTEX (77)
5093
  ebx - SSF_CREATE (0)
5096
  ebx - SSF_CREATE (0)
5094
======================================================================
5097
======================================================================
5095
========= Function 77, Subfunction 1, Destroy futex object ===========
5098
========= Function 77, Subfunction 1, Destroy futex object ===========
5096
======================================================================
5099
======================================================================
5097
Parameters:
5100
Parameters:
5098
  * eax = 77 - function number
5101
  * eax = 77 - function number
5099
  * ebx = 1 - subfunction number
5102
  * ebx = 1 - subfunction number
5100
  * ecx = futex handle
5103
  * ecx = futex handle
5101
Returned value:
5104
Returned value:
5102
  * eax = 0 - successfull, -1 on error
5105
  * eax = 0 - successfull, -1 on error
5103
Remarks:
5106
Remarks:
5104
  * The futex handle must have been created by subfunction 0
5107
  * The futex handle must have been created by subfunction 0
5105
 
5108
 
5106
---------------------- Constants for registers: ----------------------
5109
---------------------- Constants for registers: ----------------------
5107
  eax - SF_FUTEX (77)
5110
  eax - SF_FUTEX (77)
5108
  ebx - SSF_DESTROY (1)
5111
  ebx - SSF_DESTROY (1)
5109
======================================================================
5112
======================================================================
5110
=============== Function 77, Subfunction 2, Futex wait ===============
5113
=============== Function 77, Subfunction 2, Futex wait ===============
5111
======================================================================
5114
======================================================================
5112
Parameters:
5115
Parameters:
5113
  * eax = 77 - function number
5116
  * eax = 77 - function number
5114
  * ebx = 2 - subfunction number
5117
  * ebx = 2 - subfunction number
5115
  * ecx = futex handle
5118
  * ecx = futex handle
5116
  * edx = control value
5119
  * edx = control value
5117
  * esi = timeout in system ticks or 0 for infinity
5120
  * esi = timeout in system ticks or 0 for infinity
5118
Returned value:
5121
Returned value:
5119
  * eax = 0 - successfull
5122
  * eax = 0 - successfull
5120
	 -1 - timeout
5123
	 -1 - timeout
5121
	 -2 - futex dword does not have the same value as edx
5124
	 -2 - futex dword does not have the same value as edx
5122
Remarks:
5125
Remarks:
5123
  * This functionn tests that the value at the futex dword still
5126
  * This functionn tests that the value at the futex dword still
5124
    contains the expected control value, and if so, then sleeps
5127
    contains the expected control value, and if so, then sleeps
5125
    waiting for a wake operation on the futex.
5128
    waiting for a wake operation on the futex.
5126
  * The futex handle must have been created by subfunction 0
5129
  * The futex handle must have been created by subfunction 0
5127
 
5130
 
5128
---------------------- Constants for registers: ----------------------
5131
---------------------- Constants for registers: ----------------------
5129
  eax - SF_FUTEX (77)
5132
  eax - SF_FUTEX (77)
5130
  ebx - SSF_WAIT (2)
5133
  ebx - SSF_WAIT (2)
5131
======================================================================
5134
======================================================================
5132
=============== Function 77, Subfunction 3, Futex wake ===============
5135
=============== Function 77, Subfunction 3, Futex wake ===============
5133
======================================================================
5136
======================================================================
5134
Parameters:
5137
Parameters:
5135
  * eax = 77 - function number
5138
  * eax = 77 - function number
5136
  * ebx = 3 - subfunction number
5139
  * ebx = 3 - subfunction number
5137
  * ecx = futex handle
5140
  * ecx = futex handle
5138
  * edx = number of waiters to wake
5141
  * edx = number of waiters to wake
5139
Returned value:
5142
Returned value:
5140
  * eax = number of waiters that were woken up
5143
  * eax = number of waiters that were woken up
5141
 
5144
 
5142
Remarks:
5145
Remarks:
5143
  * This function wakes at most edx of the waiters that are
5146
  * This function wakes at most edx of the waiters that are
5144
    waiting (e.g., inside futex wait) on the futex dword
5147
    waiting (e.g., inside futex wait) on the futex dword
5145
  * The futex handle must have been created by subfunction 0
5148
  * The futex handle must have been created by subfunction 0
5146
 
5149
 
5147
---------------------- Constants for registers: ----------------------
5150
---------------------- Constants for registers: ----------------------
5148
  eax - SF_FUTEX (77)
5151
  eax - SF_FUTEX (77)
5149
  ebx - SSF_WAKE (3)
5152
  ebx - SSF_WAKE (3)
5150
======================================================================
5153
======================================================================
5151
=== Function 80 - file system interface with parameter of encoding ===
5154
=== Function 80 - file system interface with parameter of encoding ===
5152
======================================================================
5155
======================================================================
5153
Parameters:
5156
Parameters:
5154
  * eax = 80
5157
  * eax = 80
5155
  * ebx = pointer to the information structure
5158
  * ebx = pointer to the information structure
5156
Returned value:
5159
Returned value:
5157
  * eax = 0 - success; otherwise file system error code
5160
  * eax = 0 - success; otherwise file system error code
5158
  * some subfunctions return value in other registers too
5161
  * some subfunctions return value in other registers too
5159
General format of the information structure:
5162
General format of the information structure:
5160
  * +0: dword: subfunction number
5163
  * +0: dword: subfunction number
5161
  * +4: dword: offset in file or folder
5164
  * +4: dword: offset in file or folder
5162
  * +8: dword: higher part of offset or flags
5165
  * +8: dword: higher part of offset or flags
5163
  * +12 = +0xC: dword: size of data
5166
  * +12 = +0xC: dword: size of data
5164
  * +16 = +0x10: dword: pointer to data
5167
  * +16 = +0x10: dword: pointer to data
5165
  * +20 = +0x14: dword: string encoding:
5168
  * +20 = +0x14: dword: string encoding:
5166
    1 = cp866
5169
    1 = cp866
5167
    2 = UTF-16LE
5170
    2 = UTF-16LE
5168
    3 = UTF-8
5171
    3 = UTF-8
5169
    0 = default (supports encoding byte at the start of the string)
5172
    0 = default (supports encoding byte at the start of the string)
5170
  * +24 = +0x18: dword: pointer to zero terminated string with path
5173
  * +24 = +0x18: dword: pointer to zero terminated string with path
5171
 
5174
 
5172
The rest is similar to sysfunction 70.
5175
The rest is similar to sysfunction 70.
5173
 
5176
 
5174
======================================================================
5177
======================================================================
5175
=============== Function -1 - terminate thread/process ===============
5178
=============== Function -1 - terminate thread/process ===============
5176
======================================================================
5179
======================================================================
5177
Parameters:
5180
Parameters:
5178
  * eax = -1 - function number
5181
  * eax = -1 - function number
5179
Returned value:
5182
Returned value:
5180
  * function does not return neither value nor control
5183
  * function does not return neither value nor control
5181
Remarks:
5184
Remarks:
5182
  * If the process did not create threads obviously, it has only
5185
  * If the process did not create threads obviously, it has only
5183
    one thread, which termination results in process termination.
5186
    one thread, which termination results in process termination.
5184
  * If the current thread is last in the process, its termination
5187
  * If the current thread is last in the process, its termination
5185
    also results in process terminates.
5188
    also results in process terminates.
5186
  * This function terminates the current thread. Other thread can be
5189
  * This function terminates the current thread. Other thread can be
5187
    killed by call to subfunction 2 of function 18.
5190
    killed by call to subfunction 2 of function 18.
5188
 
5191
 
5189
---------------------- Constants for registers: ----------------------
5192
---------------------- Constants for registers: ----------------------
5190
  eax - SF_TERMINATE_PROCESS (-1)
5193
  eax - SF_TERMINATE_PROCESS (-1)
5191
======================================================================
5194
======================================================================
5192
=========================== List of events ===========================
5195
=========================== List of events ===========================
5193
======================================================================
5196
======================================================================
5194
Next event can be retrieved by the call of one from functions 10
5197
Next event can be retrieved by the call of one from functions 10
5195
(to wait for event), 11 (to check without waiting), 23
5198
(to wait for event), 11 (to check without waiting), 23
5196
(to wait during the given time).
5199
(to wait during the given time).
5197
These functions return only those events, which enter into a mask set
5200
These functions return only those events, which enter into a mask set
5198
by function 40. By default it is first three,
5201
by function 40. By default it is first three,
5199
there is enough for most applications.
5202
there is enough for most applications.
5200
Codes of events:
5203
Codes of events:
5201
  * 1 = redraw event (is reset by call to function 0)
5204
  * 1 = redraw event (is reset by call to function 0)
5202
  * 2 = key on keyboard is pressed (acts, only when the window is
5205
  * 2 = key on keyboard is pressed (acts, only when the window is
5203
    active) or hotkey is pressed; is reset, when all keys from
5206
    active) or hotkey is pressed; is reset, when all keys from
5204
    the buffer are read out by function 2
5207
    the buffer are read out by function 2
5205
  * 3 = button is pressed, defined earlier by function 8
5208
  * 3 = button is pressed, defined earlier by function 8
5206
    (or close button, created implicitly by function 0;
5209
    (or close button, created implicitly by function 0;
5207
    minimize button is handled by the system and sends no message;
5210
    minimize button is handled by the system and sends no message;
5208
    acts, only when the window is active;
5211
    acts, only when the window is active;
5209
    is reset when all buttons from the buffer
5212
    is reset when all buttons from the buffer
5210
    are read out by function 17)
5213
    are read out by function 17)
5211
  * 4 = reserved (in current implementation never comes even after
5214
  * 4 = reserved (in current implementation never comes even after
5212
    unmasking by function 40)
5215
    unmasking by function 40)
5213
  * 5 = kernel finished redrawing of the desktop background
5216
  * 5 = kernel finished redrawing of the desktop background
5214
  * 6 = mouse event (something happened - button pressing or moving;
5217
  * 6 = mouse event (something happened - button pressing or moving;
5215
    is reset at reading)
5218
    is reset at reading)
5216
  * 7 = IPC event (see function 60 -
5219
  * 7 = IPC event (see function 60 -
5217
    Inter Process Communication; is reset at reading)
5220
    Inter Process Communication; is reset at reading)
5218
  * 8 = network event (is reset at reading)
5221
  * 8 = network event (is reset at reading)
5219
  * 9 = debug event (is reset at reading; see
5222
  * 9 = debug event (is reset at reading; see
5220
    debug subsystem)
5223
    debug subsystem)
5221
  * 16..31 = event with appropriate IRQ
5224
  * 16..31 = event with appropriate IRQ
5222
    (16=IRQ0, 31=IRQ15) (is reset after reading all IRQ data)
5225
    (16=IRQ0, 31=IRQ15) (is reset after reading all IRQ data)
5223
 
5226
 
5224
======================================================================
5227
======================================================================
5225
=================== Error codes of the file system ===================
5228
=================== Error codes of the file system ===================
5226
======================================================================
5229
======================================================================
5227
  * 0 = success
5230
  * 0 = success
5228
  * 2 = function is not supported for the given file system
5231
  * 2 = function is not supported for the given file system
5229
  * 3 = unknown file system
5232
  * 3 = unknown file system
5230
  * 5 = file not found
5233
  * 5 = file not found
5231
  * 6 = end of file, EOF
5234
  * 6 = end of file, EOF
5232
  * 7 = pointer lies outside of application memory
5235
  * 7 = pointer lies outside of application memory
5233
  * 8 = disk is full
5236
  * 8 = disk is full
5234
  * 9 = file system error
5237
  * 9 = file system error
5235
  * 10 = access denied
5238
  * 10 = access denied
5236
  * 11 = device error
5239
  * 11 = device error
5237
  * 12 = file system requires more memory
5240
  * 12 = file system requires more memory
5238
 
5241
 
5239
Application start functions can return also following errors:
5242
Application start functions can return also following errors:
5240
  * 30 = 0x1E = not enough memory
5243
  * 30 = 0x1E = not enough memory
5241
  * 31 = 0x1F = file is not executable
5244
  * 31 = 0x1F = file is not executable
5242
  * 32 = 0x20 = too many processes
5245
  * 32 = 0x20 = too many processes
5243
>
5246
>
5244
>
5247
>