Subversion Repositories Kolibri OS

Rev

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

Rev 6030 Rev 6057
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2012. 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=0 - type I - fixed-size window
28
      * Y=0 - type I - fixed-size window
29
      * Y=1 - only define window area, draw nothing
29
      * Y=1 - only define window area, draw nothing
30
      * Y=2 - type II - variable-size window
30
      * Y=2 - type II - variable-size window
31
      * Y=3 - skinned window
31
      * Y=3 - skinned window
32
      * Y=4 - skinned fixed-size window
32
      * Y=4 - skinned fixed-size window
33
      * other possible values (from 5 up to 15) are reserved,
33
      * other possible values (from 5 up 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; for styles Y=3,4 caption string
38
      * A = 1 - window has caption; for styles Y=3,4 caption string
39
                  must be passed in edi, for other styles use
39
                  must be passed in edi, for other styles use
40
                  subfunction 1 of function 71
40
                  subfunction 1 of function 71
41
      * B = 1 - coordinates of all graphics primitives are relative to
41
      * B = 1 - coordinates of all graphics primitives are relative to
42
                  window client area
42
                  window client area
43
      * C = 1 - don't fill working area on window draw
43
      * C = 1 - don't fill working area on window draw
44
      * D = 0 - normal filling of the working area, 1 - gradient
44
      * D = 0 - normal filling of the working area, 1 - gradient
45
    The following parameters are intended for windows
45
    The following parameters are intended for windows
46
    of a type I and II, and ignored for styles Y=1,3:
46
    of a type I and II, and ignored for styles Y=1,3:
47
  * esi = 0xXYRRGGBB - color of the header
47
  * esi = 0xXYRRGGBB - color of the header
48
    * RR, GG, BB define color
48
    * RR, GG, BB define color
49
    * Y=0 - usual window, Y=1 - unmovable window (works for all window styles)
49
    * Y=0 - usual window, Y=1 - unmovable window (works for all window styles)
50
    * X defines a gradient of header: X=0 - no gradient,
50
    * X defines a gradient of header: X=0 - no gradient,
51
      X=8 - usual gradient,
51
      X=8 - usual gradient,
52
      for windows of a type II X=4 - negative gradient
52
      for windows of a type II X=4 - negative gradient
53
    * other values of X and Y are reserved
53
    * other values of X and Y are reserved
54
  * edi = 0x00RRGGBB - color of the frame
54
  * edi = 0x00RRGGBB - color of the frame
55
Returned value:
55
Returned value:
56
  * function does not return value
56
  * function does not return value
57
Remarks:
57
Remarks:
58
  * Position and sizes of the window are installed by the first
58
  * Position and sizes of the window are installed by the first
59
    call of this function and are ignored at subsequent; to change
59
    call of this function and are ignored at subsequent; to change
60
    position and/or sizes of already created window use function 67.
60
    position and/or sizes of already created window use function 67.
61
  * For windows with styles Y=3,4 and caption (A=1) caption string
61
  * For windows with styles Y=3,4 and caption (A=1) caption string
62
    is set by the first call of this function and is ignored
62
    is set by the first call of this function and is ignored
63
    at subsequent (strictly speaking, is ignored after a call to
63
    at subsequent (strictly speaking, is ignored after a call to
64
    subfunction 2 of function 12 - end redraw); to change caption of
64
    subfunction 2 of function 12 - end redraw); to change caption of
65
    already created window use subfunction 1 of function 71.
65
    already created window use subfunction 1 of function 71.
66
  * If the window has appropriate styles, position and/or sizes can be
66
  * If the window has appropriate styles, position and/or sizes can be
67
    changed by user. Current position and sizes can be obtained
67
    changed by user. Current position and sizes can be obtained
68
    by function 9.
68
    by function 9.
69
  * The window must fit on the screen. If the transferred
69
  * The window must fit on the screen. If the transferred
70
    coordinates and sizes do not satisfy to this condition,
70
    coordinates and sizes do not satisfy to this condition,
71
    appropriate coordinate (or, probably, both) is considered as zero,
71
    appropriate coordinate (or, probably, both) is considered as zero,
72
    and if it does not help too, the appropriate size
72
    and if it does not help too, the appropriate size
73
    (or, probably, both) is installed in a size of the screen.
73
    (or, probably, both) is installed in a size of the screen.
74
 
74
 
75
    Further let us designate xpos,ypos,xsize,ysize - values passed
75
    Further let us designate xpos,ypos,xsize,ysize - values passed
76
    in ebx,ecx. The coordinates are resulted concerning
76
    in ebx,ecx. The coordinates are resulted concerning
77
    the left upper corner of the window, which, thus, is set as (0,0),
77
    the left upper corner of the window, which, thus, is set as (0,0),
78
    coordinates of the right lower corner essence (xsize,ysize).
78
    coordinates of the right lower corner essence (xsize,ysize).
79
  * The sizes of the window are understood in sence of coordinates
79
  * The sizes of the window are understood in sence of coordinates
80
    of the right lower corner. This concerns all other functions too.
80
    of the right lower corner. This concerns all other functions too.
81
    It means, that the real sizes are on 1 pixel more.
81
    It means, that the real sizes are on 1 pixel more.
82
  * The window of type I looks as follows:
82
  * The window of type I looks as follows:
83
    * draw external frame of color indicated in edi, 1 pixel in width
83
    * draw external frame of color indicated in edi, 1 pixel in width
84
    * draw header - rectangle with the left upper corner (1,1) and
84
    * draw header - rectangle with the left upper corner (1,1) and
85
      right lower (xsize-1,min(20,ysize-1)) color indicated in esi
85
      right lower (xsize-1,min(20,ysize-1)) color indicated in esi
86
      (taking a gradient into account)
86
      (taking a gradient into account)
87
    * if ysize>21, fill the working area of the window -
87
    * if ysize>21, fill the working area of the window -
88
      rectangle with the left upper corner (1,21) and right lower
88
      rectangle with the left upper corner (1,21) and right lower
89
      (xsize-1,ysize-1) (sizes (xsize-1)*(ysize-21)) with color
89
      (xsize-1,ysize-1) (sizes (xsize-1)*(ysize-21)) with color
90
      indicated in edx (taking a gradient into account)
90
      indicated in edx (taking a gradient into account)
91
    * if A=1 and caption has been already set by subfunction 1
91
    * if A=1 and caption has been already set by subfunction 1
92
      of function 71, it is drawn in the corresponding place of header
92
      of function 71, it is drawn in the corresponding place of header
93
  * The window of style Y=1 looks as follows:
93
  * The window of style Y=1 looks as follows:
94
    * completely defined by the application
94
    * completely defined by the application
95
  * The window of type II looks as follows:
95
  * The window of type II looks as follows:
96
    * draw external frame of width 1 pixel with the "shaded" color
96
    * draw external frame of width 1 pixel with the "shaded" color
97
      edi (all components of the color decrease twice)
97
      edi (all components of the color decrease twice)
98
    * draw intermediate frame of width 3 pixels with color edi
98
    * draw intermediate frame of width 3 pixels with color edi
99
    * draw internal frame of width 1 pixel with the "shaded" color edi
99
    * draw internal frame of width 1 pixel with the "shaded" color edi
100
    * draw header - rectangle with the left upper corner (4,4)
100
    * draw header - rectangle with the left upper corner (4,4)
101
      and right lower (xsize-4,min(20,ysize)) color, indicated in esi
101
      and right lower (xsize-4,min(20,ysize)) color, indicated in esi
102
      (taking a gradient into account)
102
      (taking a gradient into account)
103
    * if ysize>=26, fill the working area of the window -
103
    * if ysize>=26, fill the working area of the window -
104
      rectangle with the left upper corner (5,20) and right lower
104
      rectangle with the left upper corner (5,20) and right lower
105
      (xsize-5,ysize-5) with color indicated in edx
105
      (xsize-5,ysize-5) with color indicated in edx
106
      (taking a gradient into account)
106
      (taking a gradient into account)
107
    * if A=1 and caption has been already set by subfunction 1
107
    * if A=1 and caption has been already set by subfunction 1
108
      of function 71, it is drawn in the corresponding place of header
108
      of function 71, it is drawn in the corresponding place of header
109
  * The skinned window looks as follows:
109
  * The skinned window looks as follows:
110
    * draw external frame of width 1 pixel
110
    * draw external frame of width 1 pixel
111
      with color 'outer' from the skin
111
      with color 'outer' from the skin
112
    * draw intermediate frame of width 3 pixel
112
    * draw intermediate frame of width 3 pixel
113
      with color 'frame' from the skin
113
      with color 'frame' from the skin
114
    * draw internal frame of width 1 pixel
114
    * draw internal frame of width 1 pixel
115
      with color 'inner' from the skin
115
      with color 'inner' from the skin
116
    * draw header (on bitmaps from the skin) in a rectangle
116
    * draw header (on bitmaps from the skin) in a rectangle
117
      (0,0) - (xsize,_skinh-1)
117
      (0,0) - (xsize,_skinh-1)
118
    * if ysize>=26, fill the working area of the window -
118
    * if ysize>=26, fill the working area of the window -
119
      rectangle with the left upper corner (5,_skinh) and right lower
119
      rectangle with the left upper corner (5,_skinh) and right lower
120
      (xsize-5,ysize-5) with color indicated in edx
120
      (xsize-5,ysize-5) with color indicated in edx
121
      (taking a gradient into account)
121
      (taking a gradient into account)
122
    * define two standard buttons: close and minimize
122
    * define two standard buttons: close and minimize
123
      (see function 8)
123
      (see function 8)
124
    * if A=1 and edi contains (nonzero) pointer to caption string,
124
    * if A=1 and edi contains (nonzero) pointer to caption string,
125
      it is drawn in place in header defined in the skin
125
      it is drawn in place in header defined in the skin
126
    * value _skinh is accessible as the result of call
126
    * value _skinh is accessible as the result of call
127
      subfunction 4 of function 48
127
      subfunction 4 of function 48
-
 
128
 
-
 
129
---------------------- Constants for registers: ----------------------
128
 
130
  eax - SF_CREATE_WINDOW (0)
129
======================================================================
131
======================================================================
130
================ Function 1 - put pixel in the window. ===============
132
================ Function 1 - put pixel in the window. ===============
131
======================================================================
133
======================================================================
132
Parameters:
134
Parameters:
133
  * eax = 1 - function number
135
  * eax = 1 - function number
134
  * ebx = x-coordinate (relative to the window)
136
  * ebx = x-coordinate (relative to the window)
135
  * ecx = y-coordinate (relative to the window)
137
  * ecx = y-coordinate (relative to the window)
136
  * edx = 0x00RRGGBB - color of a pixel
138
  * edx = 0x00RRGGBB - color of a pixel
137
    edx = 0x01xxxxxx - invert color of a pixel
139
    edx = 0x01xxxxxx - invert color of a pixel
138
          (low 24 bits are ignored)
140
          (low 24 bits are ignored)
139
Returned value:
141
Returned value:
140
  * function does not return value
142
  * function does not return value
-
 
143
 
-
 
144
---------------------- Constants for registers: ----------------------
141
 
145
  eax - SF_PUT_PIXEL (1)
142
======================================================================
146
======================================================================
143
============ Function 2 - get the code of the pressed key. ===========
147
============ Function 2 - get the code of the pressed key. ===========
144
======================================================================
148
======================================================================
145
Takes away the code of the pressed key from the buffer.
149
Takes away the code of the pressed key from the buffer.
146
Parameters:
150
Parameters:
147
  * eax = 2 - function number
151
  * eax = 2 - function number
148
Returned value:
152
Returned value:
149
  * if the buffer is empty, function returns eax=1
153
  * if the buffer is empty, function returns eax=1
150
  * if the buffer is not empty, function returns al=0,
154
  * if the buffer is not empty, function returns al=0,
151
    ah=code of the pressed key,
155
    ah=code of the pressed key,
152
    bits 16-23 = contain scancode for pressed key in ASCII mode,
156
    bits 16-23 = contain scancode for pressed key in ASCII mode,
153
                 in the scancodes mode this bits cleared.
157
                 in the scancodes mode this bits cleared.
154
    bits 23-31 = zero
158
    bits 23-31 = zero
155
  * if there is "hotkey", function returns al=2,
159
  * if there is "hotkey", function returns al=2,
156
    ah=scancode of the pressed key (0 for control keys),
160
    ah=scancode of the pressed key (0 for control keys),
157
    high word of eax contains a status of control keys at the moment
161
    high word of eax contains a status of control keys at the moment
158
    of pressing a hotkey
162
    of pressing a hotkey
159
Remarks:
163
Remarks:
160
  * There is a common system buffer of the pressed keys
164
  * There is a common system buffer of the pressed keys
161
    by a size of 120 bytes, organized as queue.
165
    by a size of 120 bytes, organized as queue.
162
  * There is one more common system buffer on 120 "hotkeys".
166
  * There is one more common system buffer on 120 "hotkeys".
163
  * If the application with the inactive window calls this function,
167
  * If the application with the inactive window calls this function,
164
    the buffer of the pressed keys is considered to be empty.
168
    the buffer of the pressed keys is considered to be empty.
165
  * By default this function returns ASCII-codes; to switch
169
  * By default this function returns ASCII-codes; to switch
166
    to the scancodes mode (and back) use function 66.
170
    to the scancodes mode (and back) use function 66.
167
    However, hotkeys are always notificated as scancodes.
171
    However, hotkeys are always notificated as scancodes.
168
  * To find out, what keys correspond to what codes, start
172
  * To find out, what keys correspond to what codes, start
169
    the application keyascii and scancode.
173
    the application keyascii and scancode.
170
  * Scancodes come directly from keyboard and are fixed;
174
  * Scancodes come directly from keyboard and are fixed;
171
    ASCII-codes turn out with usage of the conversion tables,
175
    ASCII-codes turn out with usage of the conversion tables,
172
    which can be set by subfunction 2 of function 21
176
    which can be set by subfunction 2 of function 21
173
    and get by subfunction 2 of function 26.
177
    and get by subfunction 2 of function 26.
174
  * As a consequence, ASCII-codes take into account current
178
  * As a consequence, ASCII-codes take into account current
175
    keyboard layout (rus/en) as opposed to scancodes.
179
    keyboard layout (rus/en) as opposed to scancodes.
176
  * This function notifies only about those hotkeys, which were
180
  * This function notifies only about those hotkeys, which were
177
    defined by this thread by subfunction 4 of function 66.
181
    defined by this thread by subfunction 4 of function 66.
-
 
182
 
-
 
183
---------------------- Constants for registers: ----------------------
178
 
184
  eax - SF_GET_KEY (2)
179
======================================================================
185
======================================================================
180
==================== Function 3 - get system time. ===================
186
==================== Function 3 - get system time. ===================
181
======================================================================
187
======================================================================
182
Parameters:
188
Parameters:
183
  * eax = 3 - function number
189
  * eax = 3 - function number
184
Returned value:
190
Returned value:
185
  * eax = 0x00SSMMHH, where HH:MM:SS = Hours:Minutes:Seconds
191
  * eax = 0x00SSMMHH, where HH:MM:SS = Hours:Minutes:Seconds
186
  * each item is BCD-number, for example,
192
  * each item is BCD-number, for example,
187
    for time 23:59:59 function returns 0x00595923
193
    for time 23:59:59 function returns 0x00595923
188
Remarks:
194
Remarks:
189
  * See also subfunction 9 of function 26 - get time from
195
  * See also subfunction 9 of function 26 - get time from
190
    the moment of start of the system; it is more convenient, because
196
    the moment of start of the system; it is more convenient, because
191
    returns simply DWORD-value of the time counter.
197
    returns simply DWORD-value of the time counter.
192
  * System time can be set by function 22.
198
  * System time can be set by function 22.
-
 
199
 
-
 
200
---------------------- Constants for registers: ----------------------
193
 
201
  eax - SF_GET_SYS_TIME (3)
194
======================================================================
202
======================================================================
195
=================== Function 4 - draw text string. ===================
203
=================== Function 4 - draw text string. ===================
196
======================================================================
204
======================================================================
197
Parameters:
205
Parameters:
198
  * eax = 4 - function number
206
  * eax = 4 - function number
199
  * ebx = X*65536+Y, coordinates in the window or buffer
207
  * ebx = X*65536+Y, coordinates in the window or buffer
200
  * ecx = 0xXXRRGGBB, where
208
  * ecx = 0xXXRRGGBB, where
201
    * RR, GG, BB specify text color
209
    * RR, GG, BB specify text color
202
    * XX = ABFFCSSS (bits):
210
    * XX = ABFFCSSS (bits):
203
      * A=1 - output zero terminated string
211
      * A=1 - output zero terminated string
204
      * B=1 - fill background (color = edi)
212
      * B=1 - fill background (color = edi)
205
      * FF specifies the font and encoding:
213
      * FF specifies the font and encoding:
206
        0 = 6x9  cp866
214
        0 = 6x9  cp866
207
        1 = 8x16 cp866
215
        1 = 8x16 cp866
208
        2 = 8x16 UTF-16LE
216
        2 = 8x16 UTF-16LE
209
        3 = 8x16 UTF-8
217
        3 = 8x16 UTF-8
210
      * C=0 - draw to the window,
218
      * C=0 - draw to the window,
211
        C=1 - draw to the user buffer (edi)
219
        C=1 - draw to the user buffer (edi)
212
      * SSS = (size multiplier)-1, so 0 = x1, 7 = x8
220
      * SSS = (size multiplier)-1, so 0 = x1, 7 = x8
213
  * edx = pointer to the beginning of the string
221
  * edx = pointer to the beginning of the string
214
  * esi = for A=0 length of the string, for A=1 is ignored
222
  * esi = for A=0 length of the string, for A=1 is ignored
215
  * edi = for B=1 color to fill background,
223
  * edi = for B=1 color to fill background,
216
          for C=1 pointer to user buffer
224
          for C=1 pointer to user buffer
217
 
225
 
218
Returned value:
226
Returned value:
219
  * function does not return value
227
  * function does not return value
220
Remarks:
228
Remarks:
221
  * You can not use B=1 and C=1 at the same time, since both use edi.
229
  * You can not use B=1 and C=1 at the same time, since both use edi.
222
  * When SSS=0, font may be smoothed, depending on system setting.
230
  * When SSS=0, font may be smoothed, depending on system setting.
223
  * User buffer structure:
231
  * User buffer structure:
224
Xsize       dd
232
Xsize       dd
225
Ysize       dd
233
Ysize       dd
226
picture     rb  Xsize*Ysize*4  ; 32 bpp
234
picture     rb  Xsize*Ysize*4  ; 32 bpp
-
 
235
 
-
 
236
---------------------- Constants for registers: ----------------------
227
 
237
  eax - SF_DRAW_TEXT (4)
228
======================================================================
238
======================================================================
229
========================= Function 5 - delay. ========================
239
========================= Function 5 - delay. ========================
230
======================================================================
240
======================================================================
231
Delays execution of the program on the given time.
241
Delays execution of the program on the given time.
232
Parameters:
242
Parameters:
233
  * eax = 5 - function number
243
  * eax = 5 - function number
234
  * ebx = time in the 1/100 of second
244
  * ebx = time in the 1/100 of second
235
Returned value:
245
Returned value:
236
  * function does not return value
246
  * function does not return value
237
Remarks:
247
Remarks:
238
  * Passing ebx=0 does not transfer control to the next process
248
  * Passing ebx=0 does not transfer control to the next process
239
    and does not make any operations at all. If it is really required
249
    and does not make any operations at all. If it is really required
240
    to transfer control to the next process (to complete a current
250
    to transfer control to the next process (to complete a current
241
    time slice), use subfunction 1 of function 68.
251
    time slice), use subfunction 1 of function 68.
-
 
252
 
-
 
253
---------------------- Constants for registers: ----------------------
242
 
254
  eax - SF_SLEEP (5)
243
======================================================================
255
======================================================================
244
=============== Function 7 - draw image in the window. ===============
256
=============== Function 7 - draw image in the window. ===============
245
======================================================================
257
======================================================================
246
Paramters:
258
Paramters:
247
  * eax = 7 - function number
259
  * eax = 7 - function number
248
  * ebx = pointer to the image in the format BBGGRRBBGGRR...
260
  * ebx = pointer to the image in the format BBGGRRBBGGRR...
249
  * ecx = [size on axis x]*65536 + [size on axis y]
261
  * ecx = [size on axis x]*65536 + [size on axis y]
250
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
262
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
251
Returned value:
263
Returned value:
252
  * function does not return value
264
  * function does not return value
253
Remarks:
265
Remarks:
254
  * Coordinates of the image are coordinates of the upper left corner
266
  * Coordinates of the image are coordinates of the upper left corner
255
    of the image relative to the window.
267
    of the image relative to the window.
256
  * Size of the image in bytes is 3*xsize*ysize.
268
  * Size of the image in bytes is 3*xsize*ysize.
-
 
269
 
-
 
270
---------------------- Constants for registers: ----------------------
257
 
271
  eax - SF_PUT_IMAGE (7)
258
======================================================================
272
======================================================================
259
=============== Function 8 - define/delete the button. ===============
273
=============== Function 8 - define/delete the button. ===============
260
======================================================================
274
======================================================================
261
Parameters for button definition:
275
Parameters for button definition:
262
  * eax = 8 - function number
276
  * eax = 8 - function number
263
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
277
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
264
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
278
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
265
  * edx = 0xXYnnnnnn, where:
279
  * edx = 0xXYnnnnnn, where:
266
    * nnnnnn = identifier of the button
280
    * nnnnnn = identifier of the button
267
    * high (31st) bit of edx is cleared
281
    * high (31st) bit of edx is cleared
268
    * if 30th bit of edx is set - do not draw the button
282
    * if 30th bit of edx is set - do not draw the button
269
    * if 29th bit of edx is set - do not draw a frame
283
    * if 29th bit of edx is set - do not draw a frame
270
      at pressing the button
284
      at pressing the button
271
  * esi = 0x00RRGGBB - color of the button
285
  * esi = 0x00RRGGBB - color of the button
272
Parameters for button deleting:
286
Parameters for button deleting:
273
  * eax = 8 - function number
287
  * eax = 8 - function number
274
  * edx = 0x80nnnnnn, where nnnnnn - identifier of the button
288
  * edx = 0x80nnnnnn, where nnnnnn - identifier of the button
275
Returned value:
289
Returned value:
276
  * function does not return value
290
  * function does not return value
277
Remarks:
291
Remarks:
278
  * Sizes of the button must be more than 0 and less than 0x8000.
292
  * Sizes of the button must be more than 0 and less than 0x8000.
279
  * For skinned windows definition of the window
293
  * For skinned windows definition of the window
280
    (call of 0th function) creates two standard buttons -
294
    (call of 0th function) creates two standard buttons -
281
    for close of the window with identifier 1 and
295
    for close of the window with identifier 1 and
282
    for minimize of the window with identifier 0xffff.
296
    for minimize of the window with identifier 0xffff.
283
  * The creation of two buttons with same identifiers is admitted.
297
  * The creation of two buttons with same identifiers is admitted.
284
  * The button with the identifier 0xffff at pressing is interpreted
298
  * The button with the identifier 0xffff at pressing is interpreted
285
    by the system as the button of minimization, the system handles
299
    by the system as the button of minimization, the system handles
286
    such pressing independently, not accessing to the application.
300
    such pressing independently, not accessing to the application.
287
    In rest it is usual button.
301
    In rest it is usual button.
288
  * Total number of buttons for all applications is limited to 4095.
302
  * Total number of buttons for all applications is limited to 4095.
-
 
303
 
-
 
304
---------------------- Constants for registers: ----------------------
289
 
305
  eax - SF_DEFINE_BUTTON (8)
290
======================================================================
306
======================================================================
291
============ Function 9 - information on execution thread. ===========
307
============ Function 9 - information on execution thread. ===========
292
======================================================================
308
======================================================================
293
Parameters:
309
Parameters:
294
  * eax = 9 - function number
310
  * eax = 9 - function number
295
  * ebx = pointer to 1-Kb buffer
311
  * ebx = pointer to 1-Kb buffer
296
  * ecx = number of the slot of the thread
312
  * ecx = number of the slot of the thread
297
    ecx = -1 - get information on the current thread
313
    ecx = -1 - get information on the current thread
298
Returned value:
314
Returned value:
299
  * eax = maximum number of the slot of a thread
315
  * eax = maximum number of the slot of a thread
300
  * buffer pointed to by ebx contains the following information:
316
  * buffer pointed to by ebx contains the following information:
301
    * +0: dword: usage of the processor (how many time units
317
    * +0: dword: usage of the processor (how many time units
302
      per second leaves on execution of this thread)
318
      per second leaves on execution of this thread)
303
    * +4: word: position of the window of thread in the window stack
319
    * +4: word: position of the window of thread in the window stack
304
    * +6: word: (has no relation to the specified thread)
320
    * +6: word: (has no relation to the specified thread)
305
      number of the thread slot, which window has in the window stack
321
      number of the thread slot, which window has in the window stack
306
      position ecx
322
      position ecx
307
    * +8: word: reserved
323
    * +8: word: reserved
308
    * +10 = +0xA: 11 bytes: name of the process
324
    * +10 = +0xA: 11 bytes: name of the process
309
      (name of the started file - executable file without extension)
325
      (name of the started file - executable file without extension)
310
    * +21 = +0x15: byte: reserved, this byte is not changed
326
    * +21 = +0x15: byte: reserved, this byte is not changed
311
    * +22 = +0x16: dword: address of the process in memory
327
    * +22 = +0x16: dword: address of the process in memory
312
    * +26 = +0x1A: dword: size of used memory - 1
328
    * +26 = +0x1A: dword: size of used memory - 1
313
    * +30 = +0x1E: dword: identifier (PID/TID)
329
    * +30 = +0x1E: dword: identifier (PID/TID)
314
    * +34 = +0x22: dword: coordinate of the thread window on axis x
330
    * +34 = +0x22: dword: coordinate of the thread window on axis x
315
    * +38 = +0x26: dword: coordinate of the thread window on axis y
331
    * +38 = +0x26: dword: coordinate of the thread window on axis y
316
    * +42 = +0x2A: dword: size of the thread window on axis x
332
    * +42 = +0x2A: dword: size of the thread window on axis x
317
    * +46 = +0x2E: dword: size of the thread window on axis y
333
    * +46 = +0x2E: dword: size of the thread window on axis y
318
    * +50 = +0x32: word: status of the thread slot:
334
    * +50 = +0x32: word: status of the thread slot:
319
      * 0 = thread is running
335
      * 0 = thread is running
320
      * 1 = thread is suspended
336
      * 1 = thread is suspended
321
      * 2 = thread is suspended while waiting for event
337
      * 2 = thread is suspended while waiting for event
322
      * 3 = thread is terminating as a result of call to function -1
338
      * 3 = thread is terminating as a result of call to function -1
323
        or under duress as a result of call to subfunction 2
339
        or under duress as a result of call to subfunction 2
324
        of function 18 or termination of the system
340
        of function 18 or termination of the system
325
      * 4 = thread is terminating as a result of exception
341
      * 4 = thread is terminating as a result of exception
326
      * 5 = thread waits for event
342
      * 5 = thread waits for event
327
      * 9 = requested slot is free, all other information on the slot
343
      * 9 = requested slot is free, all other information on the slot
328
        is not meaningful
344
        is not meaningful
329
    * +52 = +0x34: word: reserved, this word is not changed
345
    * +52 = +0x34: word: reserved, this word is not changed
330
    * +54 = +0x36: dword: coordinate of the client area on axis x
346
    * +54 = +0x36: dword: coordinate of the client area on axis x
331
    * +58 = +0x3A: dword: coordinate of the client area on axis y
347
    * +58 = +0x3A: dword: coordinate of the client area on axis y
332
    * +62 = +0x3E: dword: width of the client area
348
    * +62 = +0x3E: dword: width of the client area
333
    * +66 = +0x42: dword: height of the client area
349
    * +66 = +0x42: dword: height of the client area
334
    * +70 = +0x46: byte: state of the window - bitfield
350
    * +70 = +0x46: byte: state of the window - bitfield
335
      * bit 0 (mask 1): window is maximized
351
      * bit 0 (mask 1): window is maximized
336
      * bit 1 (mask 2): window is minimized to panel
352
      * bit 1 (mask 2): window is minimized to panel
337
      * bit 2 (mask 4): window is rolled up
353
      * bit 2 (mask 4): window is rolled up
338
    * +71 = +0x47: dword: event mask
354
    * +71 = +0x47: dword: event mask
339
    * +75 = +0x4B: byte: keyboard mode(ASCII = 0; SCAN = 1)
355
    * +75 = +0x4B: byte: keyboard mode(ASCII = 0; SCAN = 1)
340
Remarks:
356
Remarks:
341
  * Slots are numbered starting from 1.
357
  * Slots are numbered starting from 1.
342
  * Returned value is not a total number of threads, because there
358
  * Returned value is not a total number of threads, because there
343
    can be free slots.
359
    can be free slots.
344
  * When process is starting, system automatically creates
360
  * When process is starting, system automatically creates
345
    execution thread.
361
    execution thread.
346
  * Function gives information on the thread. Each process has
362
  * Function gives information on the thread. Each process has
347
    at least one thread. One process can create many threads,
363
    at least one thread. One process can create many threads,
348
    in this case each thread has its own slot and the fields
364
    in this case each thread has its own slot and the fields
349
    +10, +22, +26 in these slots coincide.
365
    +10, +22, +26 in these slots coincide.
350
    Applications have no common way to define whether two threads
366
    Applications have no common way to define whether two threads
351
    belong to one process.
367
    belong to one process.
352
  * The active window - window on top of the window stack -
368
  * The active window - window on top of the window stack -
353
    receives the messages on a keyboard input. For such window
369
    receives the messages on a keyboard input. For such window
354
    the position in the window stack coincides with returned value.
370
    the position in the window stack coincides with returned value.
355
  * Slot 1 corresponds to special system thread, for which:
371
  * Slot 1 corresponds to special system thread, for which:
356
    * the window is in the bottom of the window stack, the fields
372
    * the window is in the bottom of the window stack, the fields
357
      +4 and +6 contain value 1
373
      +4 and +6 contain value 1
358
    * name of the process - "OS/IDLE" (supplemented by spaces)
374
    * name of the process - "OS/IDLE" (supplemented by spaces)
359
    * address of the process in memory is 0, size of used memory is
375
    * address of the process in memory is 0, size of used memory is
360
      16 Mb (0x1000000)
376
      16 Mb (0x1000000)
361
    * PID=1
377
    * PID=1
362
    * coordinates and sizes of the window and the client area are by
378
    * coordinates and sizes of the window and the client area are by
363
      convention set to 0
379
      convention set to 0
364
    * status of the slot is always 0 (running)
380
    * status of the slot is always 0 (running)
365
    * the execution time adds of time leaving on operations itself
381
    * the execution time adds of time leaving on operations itself
366
      and idle time in waiting for interrupt (which can be got by call
382
      and idle time in waiting for interrupt (which can be got by call
367
      to subfunction 4 of function 18).
383
      to subfunction 4 of function 18).
368
  * Beginning from slot 2, the normal applications are placed.
384
  * Beginning from slot 2, the normal applications are placed.
369
  * The normal applications are placed in memory at the address
385
  * The normal applications are placed in memory at the address
370
    0 (kernel constant 'std_application_base_address').
386
    0 (kernel constant 'std_application_base_address').
371
    There is no intersection, as each process has its own page table.
387
    There is no intersection, as each process has its own page table.
372
  * At creation of the thread it is assigned the slot
388
  * At creation of the thread it is assigned the slot
373
    in the system table and identifier (Process/Thread IDentifier =
389
    in the system table and identifier (Process/Thread IDentifier =
374
    PID/TID), which do not vary with time for given thread.
390
    PID/TID), which do not vary with time for given thread.
375
    After completion of the thread its slot can be anew used
391
    After completion of the thread its slot can be anew used
376
    for another thread. The thread identifier can not be assigned
392
    for another thread. The thread identifier can not be assigned
377
    to other thread even after completion of this thread.
393
    to other thread even after completion of this thread.
378
    Identifiers, assigned to new threads, grow monotonously.
394
    Identifiers, assigned to new threads, grow monotonously.
379
  * If the thread has not yet defined the window by call to
395
  * If the thread has not yet defined the window by call to
380
    function 0, the position and the sizes
396
    function 0, the position and the sizes
381
    of its window are considered to be zero.
397
    of its window are considered to be zero.
382
  * Coordinates of the client area are relative to the window.
398
  * Coordinates of the client area are relative to the window.
383
  * At the moment only the part of the buffer by a size
399
  * At the moment only the part of the buffer by a size
384
    76 = 0x4C bytes is used. Nevertheless it is recommended to use
400
    76 = 0x4C bytes is used. Nevertheless it is recommended to use
385
    1-Kb buffer for the future compatibility, in the future
401
    1-Kb buffer for the future compatibility, in the future
386
    some fields can be added.
402
    some fields can be added.
-
 
403
 
-
 
404
---------------------- Constants for registers: ----------------------
387
 
405
  eax - SF_THREAD_INFO (9)
388
======================================================================
406
======================================================================
389
==================== Function 10 - wait for event. ===================
407
==================== Function 10 - wait for event. ===================
390
======================================================================
408
======================================================================
391
If the message queue is empty, waits for appearance of the message
409
If the message queue is empty, waits for appearance of the message
392
in queue. In this state thread does not consume CPU time.
410
in queue. In this state thread does not consume CPU time.
393
Then reads out the message from queue.
411
Then reads out the message from queue.
394
 
412
 
395
Parameters:
413
Parameters:
396
  * eax = 10 - function number
414
  * eax = 10 - function number
397
Returned value:
415
Returned value:
398
  * eax = event (see the list of events)
416
  * eax = event (see the list of events)
399
Remarks:
417
Remarks:
400
  * Those events are taken into account only which enter into
418
  * Those events are taken into account only which enter into
401
    a mask set by function 40. By default it is
419
    a mask set by function 40. By default it is
402
    redraw, key and button events.
420
    redraw, key and button events.
403
  * To check, whether there is a message in queue, use function 11.
421
  * To check, whether there is a message in queue, use function 11.
404
    To wait for no more than given time, use function 23.
422
    To wait for no more than given time, use function 23.
-
 
423
 
-
 
424
---------------------- Constants for registers: ----------------------
405
 
425
  eax - SF_WAIT_EVENT (10)
406
======================================================================
426
======================================================================
407
=============== Function 11 - check for event, no wait. ==============
427
=============== Function 11 - check for event, no wait. ==============
408
======================================================================
428
======================================================================
409
If the message queue contains event, function reads out
429
If the message queue contains event, function reads out
410
and return it. If the queue is empty, function returns 0.
430
and return it. If the queue is empty, function returns 0.
411
Parameters:
431
Parameters:
412
  * eax = 11 - function number
432
  * eax = 11 - function number
413
Returned value:
433
Returned value:
414
  * eax = 0 - message queue is empty
434
  * eax = 0 - message queue is empty
415
  * else eax = event (see the list of events)
435
  * else eax = event (see the list of events)
416
Remarks:
436
Remarks:
417
  * Those events are taken into account only, which enter into
437
  * Those events are taken into account only, which enter into
418
    a mask set by function 40. By default it is
438
    a mask set by function 40. By default it is
419
    redraw, key and button events.
439
    redraw, key and button events.
420
  * To wait for event, use function 10.
440
  * To wait for event, use function 10.
421
    To wait for no more than given time, use function 23.
441
    To wait for no more than given time, use function 23.
-
 
442
 
-
 
443
---------------------- Constants for registers: ----------------------
422
 
444
  eax - SF_CHECK_EVENT (11)
423
======================================================================
445
======================================================================
424
=============== Function 12 - begin/end window redraw. ===============
446
=============== Function 12 - begin/end window redraw. ===============
425
======================================================================
447
======================================================================
426
 
448
 
427
---------------- Subfunction 1 - begin window redraw. ----------------
449
---------------- Subfunction 1 - begin window redraw. ----------------
428
Parameters:
450
Parameters:
429
  * eax = 12 - function number
451
  * eax = 12 - function number
430
  * ebx = 1 - subfunction number
452
  * ebx = 1 - subfunction number
431
Returned value:
453
Returned value:
432
  * function does not return value
454
  * function does not return value
433
 
455
 
434
----------------- Subfunction 2 - end window redraw. -----------------
456
----------------- Subfunction 2 - end window redraw. -----------------
435
Parameters:
457
Parameters:
436
  * eax = 12 - function number
458
  * eax = 12 - function number
437
  * ebx = 2 - subfunction number
459
  * ebx = 2 - subfunction number
438
Returned value:
460
Returned value:
439
  * function does not return value
461
  * function does not return value
440
Remarks:
462
Remarks:
441
  * Subfunction 1 deletes all buttons defined with
463
  * Subfunction 1 deletes all buttons defined with
442
    function 8, they must be defined again.
464
    function 8, they must be defined again.
-
 
465
 
-
 
466
---------------------- Constants for registers: ----------------------
-
 
467
  eax - SF_REDRAW (12)
443
 
468
  ebx - SSF_BEGIN_DRAW (1), SSF_END_DRAW (2)
444
======================================================================
469
======================================================================
445
============ Function 13 - draw a rectangle in the window. ===========
470
============ Function 13 - draw a rectangle in the window. ===========
446
======================================================================
471
======================================================================
447
Parameters:
472
Parameters:
448
  * eax = 13 - function number
473
  * eax = 13 - function number
449
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
474
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
450
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
475
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
451
  * edx = color 0xRRGGBB or 0x80RRGGBB for gradient fill
476
  * edx = color 0xRRGGBB or 0x80RRGGBB for gradient fill
452
Returned value:
477
Returned value:
453
  * function does not return value
478
  * function does not return value
454
Remarks:
479
Remarks:
455
  * Coordinates are understood as coordinates of the left upper corner
480
  * Coordinates are understood as coordinates of the left upper corner
456
    of a rectangle relative to the window.
481
    of a rectangle relative to the window.
-
 
482
 
-
 
483
---------------------- Constants for registers: ----------------------
457
 
484
  eax - SF_DRAW_RECT (13)
458
======================================================================
485
======================================================================
459
=================== Function 14 - get screen size. ===================
486
=================== Function 14 - get screen size. ===================
460
======================================================================
487
======================================================================
461
Parameters:
488
Parameters:
462
  * eax = 14 - function number
489
  * eax = 14 - function number
463
Returned value:
490
Returned value:
464
  * eax = [xsize]*65536 + [ysize], where
491
  * eax = [xsize]*65536 + [ysize], where
465
  * xsize = x-coordinate of the right lower corner of the screen =
492
  * xsize = x-coordinate of the right lower corner of the screen =
466
            horizontal size - 1
493
            horizontal size - 1
467
  * ysize = y-coordinate of the right lower corner of the screen =
494
  * ysize = y-coordinate of the right lower corner of the screen =
468
            vertical size - 1
495
            vertical size - 1
469
Remarks:
496
Remarks:
470
  * See also subfunction 5 of function 48 - get sizes of
497
  * See also subfunction 5 of function 48 - get sizes of
471
    working area of the screen.
498
    working area of the screen.
-
 
499
 
-
 
500
---------------------- Constants for registers: ----------------------
472
 
501
  eax - SF_GET_SCREEN_SIZE (14)
473
======================================================================
502
======================================================================
474
== Function 15, subfunction 1 - set a size of the background image. ==
503
== Function 15, subfunction 1 - set a size of the background image. ==
475
======================================================================
504
======================================================================
476
Parameters:
505
Parameters:
477
  * eax = 15 - function number
506
  * eax = 15 - function number
478
  * ebx = 1 - subfunction number
507
  * ebx = 1 - subfunction number
479
  * ecx = width of the image
508
  * ecx = width of the image
480
  * edx = height of the image
509
  * edx = height of the image
481
Returned value:
510
Returned value:
482
  * function does not return value
511
  * function does not return value
483
Remarks:
512
Remarks:
484
  * Before calling subfunctions 2 and 5 you should call this function
513
  * Before calling subfunctions 2 and 5 you should call this function
485
    to set image size!
514
    to set image size!
486
  * For update of the screen (after completion of a series of commands
515
  * For update of the screen (after completion of a series of commands
487
    working with a background) call subfunction 3.
516
    working with a background) call subfunction 3.
488
  * There is a pair function for get size of the background image -
517
  * There is a pair function for get size of the background image -
489
    subfunction 1 of function 39.
518
    subfunction 1 of function 39.
-
 
519
 
-
 
520
---------------------- Constants for registers: ----------------------
-
 
521
  eax - SF_BACKGROUND_SET (15)
490
 
522
  ebx - SSF_SIZE_BG (1)
491
======================================================================
523
======================================================================
492
=== Function 15, subfunction 2 - put pixel on the background image. ==
524
=== Function 15, subfunction 2 - put pixel on the background image. ==
493
======================================================================
525
======================================================================
494
Parameters:
526
Parameters:
495
  * eax = 15 - function number
527
  * eax = 15 - function number
496
  * ebx = 2 - subfunction number
528
  * ebx = 2 - subfunction number
497
  * ecx = offset
529
  * ecx = offset
498
  * edx = color of a pixel 0xRRGGBB
530
  * edx = color of a pixel 0xRRGGBB
499
Returned value:
531
Returned value:
500
  * function does not return value
532
  * function does not return value
501
Remarks:
533
Remarks:
502
  * Offset for a pixel with coordinates (x,y) is calculated as
534
  * Offset for a pixel with coordinates (x,y) is calculated as
503
    (x+y*xsize)*3.
535
    (x+y*xsize)*3.
504
  * If the given offset exceeds size set by subfunction 1,
536
  * If the given offset exceeds size set by subfunction 1,
505
    the call is ignored.
537
    the call is ignored.
506
  * For update of the screen (after completion of a series of commands
538
  * For update of the screen (after completion of a series of commands
507
    working with a background) call subfunction 3.
539
    working with a background) call subfunction 3.
508
  * There is a pair function for get pixel on the background image -
540
  * There is a pair function for get pixel on the background image -
509
    subfunction 2 of function 39.
541
    subfunction 2 of function 39.
-
 
542
 
-
 
543
---------------------- Constants for registers: ----------------------
-
 
544
  eax - SF_BACKGROUND_SET (15)
510
 
545
  ebx - SSF_PIXEL_BG (2)
511
======================================================================
546
======================================================================
512
=========== Function 15, subfunction 3 - redraw background. ==========
547
=========== Function 15, subfunction 3 - redraw background. ==========
513
======================================================================
548
======================================================================
514
Parameters:
549
Parameters:
515
  * eax = 15 - function number
550
  * eax = 15 - function number
516
  * ebx = 3 - subfunction number
551
  * ebx = 3 - subfunction number
517
Returned value:
552
Returned value:
518
  * function does not return value
553
  * function does not return value
-
 
554
 
-
 
555
---------------------- Constants for registers: ----------------------
-
 
556
  eax - SF_BACKGROUND_SET (15)
519
 
557
  ebx - SSF_REDRAW_BG (3)
520
======================================================================
558
======================================================================
521
== Function 15, subfunction 4 - set drawing mode for the background. =
559
== Function 15, subfunction 4 - set drawing mode for the background. =
522
======================================================================
560
======================================================================
523
Parameters:
561
Parameters:
524
  * eax = 15 - function number
562
  * eax = 15 - function number
525
  * ebx = 4 - subfunction number
563
  * ebx = 4 - subfunction number
526
  * ecx = drawing mode:
564
  * ecx = drawing mode:
527
    * 1 = tile
565
    * 1 = tile
528
    * 2 = stretch
566
    * 2 = stretch
529
Returned value:
567
Returned value:
530
  * function does not return value
568
  * function does not return value
531
Remarks:
569
Remarks:
532
  * For update of the screen (after completion of a series of commands
570
  * For update of the screen (after completion of a series of commands
533
    working with a background) call subfunction 3.
571
    working with a background) call subfunction 3.
534
  * There is a pair function for get drawing mode of the background -
572
  * There is a pair function for get drawing mode of the background -
535
    subfunction 4 of function 39.
573
    subfunction 4 of function 39.
-
 
574
 
-
 
575
---------------------- Constants for registers: ----------------------
-
 
576
  eax - SF_BACKGROUND_SET (15)
536
 
577
  ebx - SSF_MODE_BG (4)
537
======================================================================
578
======================================================================
538
===================== Function 15, subfunction 5 =====================
579
===================== Function 15, subfunction 5 =====================
539
============ Put block of pixels on the background image. ============
580
============ Put block of pixels on the background image. ============
540
======================================================================
581
======================================================================
541
Parameters:
582
Parameters:
542
  * eax = 15 - function number
583
  * eax = 15 - function number
543
  * ebx = 5 - subfunction number
584
  * ebx = 5 - subfunction number
544
  * ecx = pointer to the data in the format BBGGRRBBGGRR...
585
  * ecx = pointer to the data in the format BBGGRRBBGGRR...
545
  * edx = offset in data of the background image
586
  * edx = offset in data of the background image
546
  * esi = size of data in bytes = 3 * number of pixels
587
  * esi = size of data in bytes = 3 * number of pixels
547
Returned value:
588
Returned value:
548
  * function does not return value
589
  * function does not return value
549
Remarks:
590
Remarks:
550
  * Offset and size are not checked for correctness.
591
  * Offset and size are not checked for correctness.
551
  * Color of each pixel is stored as 3-bytes value BBGGRR.
592
  * Color of each pixel is stored as 3-bytes value BBGGRR.
552
  * Pixels of the background image are written sequentially
593
  * Pixels of the background image are written sequentially
553
    from left to right, from up to down.
594
    from left to right, from up to down.
554
  * Offset of pixel with coordinates (x,y) is (x+y*xsize)*3.
595
  * Offset of pixel with coordinates (x,y) is (x+y*xsize)*3.
555
  * For update of the screen (after completion of a series of commands
596
  * For update of the screen (after completion of a series of commands
556
    working with a background) call subfunction 3.
597
    working with a background) call subfunction 3.
-
 
598
 
-
 
599
---------------------- Constants for registers: ----------------------
-
 
600
  eax - SF_BACKGROUND_SET (15)
557
 
601
  ebx - SSF_IMAGE_BG (5)
558
======================================================================
602
======================================================================
559
===================== Function 15, subfunction 6 =====================
603
===================== Function 15, subfunction 6 =====================
560
======== Map background data to the address space of process. ========
604
======== Map background data to the address space of process. ========
561
======================================================================
605
======================================================================
562
Parameters:
606
Parameters:
563
  * eax = 15 - function number
607
  * eax = 15 - function number
564
  * ebx = 6 - subfunction number
608
  * ebx = 6 - subfunction number
565
Returned value:
609
Returned value:
566
  * eax = pointer to background data, 0 if error
610
  * eax = pointer to background data, 0 if error
567
Remarks:
611
Remarks:
568
  * Mapped data are available for read and write.
612
  * Mapped data are available for read and write.
569
  * Size of background data is 3*xsize*ysize. The system blocks
613
  * Size of background data is 3*xsize*ysize. The system blocks
570
    changes of background sizes while process works with mapped data.
614
    changes of background sizes while process works with mapped data.
571
  * Color of each pixel is stored as 3-bytes value BBGGRR.
615
  * Color of each pixel is stored as 3-bytes value BBGGRR.
572
  * Pixels of the background image are written sequentially
616
  * Pixels of the background image are written sequentially
573
    from left to right, from up to down.
617
    from left to right, from up to down.
-
 
618
 
-
 
619
---------------------- Constants for registers: ----------------------
-
 
620
  eax - SF_BACKGROUND_SET (15)
574
 
621
  ebx - SSF_MAP_BG (6)
575
======================================================================
622
======================================================================
576
===== Function 15, subfunction 7 - close mapped background data. =====
623
===== Function 15, subfunction 7 - close mapped background data. =====
577
======================================================================
624
======================================================================
578
Parameters:
625
Parameters:
579
  * eax = 15 - function number
626
  * eax = 15 - function number
580
  * ebx = 7 - subfunction number
627
  * ebx = 7 - subfunction number
581
  * ecx = pointer to mapped data
628
  * ecx = pointer to mapped data
582
Returned value:
629
Returned value:
583
  * eax = 1 - success, 0 - error
630
  * eax = 1 - success, 0 - error
-
 
631
 
-
 
632
---------------------- Constants for registers: ----------------------
-
 
633
  eax - SF_BACKGROUND_SET (15)
584
 
634
  ebx - SSF_UNMAP_BG (7)
585
======================================================================
635
======================================================================
586
===================== Function 15, subfunction 8 =====================
636
===================== Function 15, subfunction 8 =====================
587
============= Get coordinates of last draw the background ============
637
============= Get coordinates of last draw the background ============
588
======================================================================
638
======================================================================
589
Parameters:
639
Parameters:
590
  * eax = 15 - function number
640
  * eax = 15 - function number
591
  * ebx = 8 - subfunction number
641
  * ebx = 8 - subfunction number
592
Returned value:
642
Returned value:
593
  * eax = [left]*65536 + [right]
643
  * eax = [left]*65536 + [right]
594
  * ebx = [top]*65536 + [bottom]
644
  * ebx = [top]*65536 + [bottom]
595
Remarks:
645
Remarks:
596
  * (left,top) are coordinates of the left upper corner,
646
  * (left,top) are coordinates of the left upper corner,
597
    (right,bottom) are coordinates of the right lower one.
647
    (right,bottom) are coordinates of the right lower one.
598
  * For receiving more reliable information, call the function
648
  * For receiving more reliable information, call the function
599
    immediately after the event:
649
    immediately after the event:
600
             5 = kernel finished redrawing of the desktop background
650
             5 = kernel finished redrawing of the desktop background
-
 
651
 
-
 
652
---------------------- Constants for registers: ----------------------
-
 
653
  eax - SF_BACKGROUND_SET (15)
601
 
654
  ebx - SSF_LAST_DRAW (8)
602
======================================================================
655
======================================================================
603
===================== Function 15, subfunction 9 =====================
656
===================== Function 15, subfunction 9 =====================
604
============= Redraws a rectangular part of the background ===========
657
============= Redraws a rectangular part of the background ===========
605
======================================================================
658
======================================================================
606
Parameters:
659
Parameters:
607
  * eax = 15 - function number
660
  * eax = 15 - function number
608
  * ebx = 9 - subfunction number
661
  * ebx = 9 - subfunction number
609
  * ecx = [left]*65536 + [right]
662
  * ecx = [left]*65536 + [right]
610
  * edx = [top]*65536 + [bottom]
663
  * edx = [top]*65536 + [bottom]
611
Returned value:
664
Returned value:
612
  * function does not return value
665
  * function does not return value
613
Remarks:
666
Remarks:
614
  * (left,top) are coordinates of the left upper corner,
667
  * (left,top) are coordinates of the left upper corner,
615
    (right,bottom) are coordinates of the right lower one.
668
    (right,bottom) are coordinates of the right lower one.
616
  * If parameters are set incorrectly then background is not redrawn.
669
  * If parameters are set incorrectly then background is not redrawn.
-
 
670
 
-
 
671
---------------------- Constants for registers: ----------------------
-
 
672
  eax - SF_BACKGROUND_SET (15)
617
 
673
  ebx - SSF_REDRAW_RECT (9)
618
======================================================================
674
======================================================================
619
=============== Function 16 - save ramdisk on a floppy. ==============
675
=============== Function 16 - save ramdisk on a floppy. ==============
620
======================================================================
676
======================================================================
621
Parameters:
677
Parameters:
622
  * eax = 16 - function number
678
  * eax = 16 - function number
623
  * ebx = 1 or ebx = 2 - on which floppy save
679
  * ebx = 1 or ebx = 2 - on which floppy save
624
Returned value:
680
Returned value:
625
  * eax = 0 - success
681
  * eax = 0 - success
626
  * eax = 1 - error
682
  * eax = 1 - error
-
 
683
 
-
 
684
---------------------- Constants for registers: ----------------------
627
 
685
  eax - SF_RD_TO_FLOPPY (16)
628
======================================================================
686
======================================================================
629
======= Function 17 - get the identifier of the pressed button. ======
687
======= Function 17 - get the identifier of the pressed button. ======
630
======================================================================
688
======================================================================
631
Takes away the code of the pressed button from the buffer.
689
Takes away the code of the pressed button from the buffer.
632
Parameters:
690
Parameters:
633
  * eax = 17 - function number
691
  * eax = 17 - function number
634
Returned value:
692
Returned value:
635
  * if the buffer is empty, function returns eax=1
693
  * if the buffer is empty, function returns eax=1
636
  * if the buffer is not empty:
694
  * if the buffer is not empty:
637
    * high 24 bits of eax contain button identifier (in particular,
695
    * high 24 bits of eax contain button identifier (in particular,
638
      ah contains low byte of the identifier; if all buttons have
696
      ah contains low byte of the identifier; if all buttons have
639
      the identifier less than 256, ah is enough to distinguish)
697
      the identifier less than 256, ah is enough to distinguish)
640
    * al = 0 - the button was pressed with left mouse button
698
    * al = 0 - the button was pressed with left mouse button
641
    * al = bit corresponding to used mouse button otherwise
699
    * al = bit corresponding to used mouse button otherwise
642
Remarks:
700
Remarks:
643
  * "Buffer" keeps only one button, at pressing the new button the
701
  * "Buffer" keeps only one button, at pressing the new button the
644
    information about old is lost.
702
    information about old is lost.
645
  * The call of this function by an application with inactive window
703
  * The call of this function by an application with inactive window
646
    will return answer "buffer is empty".
704
    will return answer "buffer is empty".
647
  * Returned value for al corresponds to the state of mouse buttons
705
  * Returned value for al corresponds to the state of mouse buttons
648
    as in subfunction 2 of function 37 at the beginning
706
    as in subfunction 2 of function 37 at the beginning
649
    of button press, excluding lower bit, which is cleared.
707
    of button press, excluding lower bit, which is cleared.
-
 
708
 
-
 
709
---------------------- Constants for registers: ----------------------
650
 
710
  eax - SF_GET_BUTTON (17)
651
======================================================================
711
======================================================================
652
===================== Function 18, subfunction 1 =====================
712
===================== Function 18, subfunction 1 =====================
653
============= Make deactive the window of the given thread. ==========
713
============= Make deactive the window of the given thread. ==========
654
======================================================================
714
======================================================================
655
Parameters:
715
Parameters:
656
  * eax = 18 - function number
716
  * eax = 18 - function number
657
  * ebx = 1 - subfunction number
717
  * ebx = 1 - subfunction number
658
  * ecx = number of the thread slot
718
  * ecx = number of the thread slot
659
Returned value:
719
Returned value:
660
  * function does not return value
720
  * function does not return value
-
 
721
 
-
 
722
---------------------- Constants for registers: ----------------------
-
 
723
  eax - SF_SYSTEM (18)
661
 
724
  ebx - SSF_UNFOCUS_WINDOW (1)
662
======================================================================
725
======================================================================
663
= Function 18, subfunction 2 - terminate process/thread by the slot. =
726
= Function 18, subfunction 2 - terminate process/thread by the slot. =
664
======================================================================
727
======================================================================
665
Parameters:
728
Parameters:
666
  * eax = 18 - function number
729
  * eax = 18 - function number
667
  * ebx = 2 - subfunction number
730
  * ebx = 2 - subfunction number
668
  * ecx = number of the slot of process/thread
731
  * ecx = number of the slot of process/thread
669
Returned value:
732
Returned value:
670
  * function does not return value
733
  * function does not return value
671
Remarks:
734
Remarks:
672
  * It is impossible to terminate system thread OS/IDLE (with
735
  * It is impossible to terminate system thread OS/IDLE (with
673
    number of the slot 1),
736
    number of the slot 1),
674
    it is possible to terminate any normal process/thread.
737
    it is possible to terminate any normal process/thread.
675
  * See also subfunction 18 - terminate
738
  * See also subfunction 18 - terminate
676
    process/thread by the identifier.
739
    process/thread by the identifier.
-
 
740
 
-
 
741
---------------------- Constants for registers: ----------------------
-
 
742
  eax - SF_SYSTEM (18)
677
 
743
  ebx - SSF_TERMINATE_THREAD (2)
678
======================================================================
744
======================================================================
679
===================== Function 18, subfunction 3 =====================
745
===================== Function 18, subfunction 3 =====================
680
============= Make active the window of the given thread. ============
746
============= Make active the window of the given thread. ============
681
======================================================================
747
======================================================================
682
Parameters:
748
Parameters:
683
  * eax = 18 - function number
749
  * eax = 18 - function number
684
  * ebx = 3 - subfunction number
750
  * ebx = 3 - subfunction number
685
  * ecx = number of the thread slot
751
  * ecx = number of the thread slot
686
Returned value:
752
Returned value:
687
  * function does not return value
753
  * function does not return value
688
Remarks:
754
Remarks:
689
  * If correct, but nonexistent slot is given,
755
  * If correct, but nonexistent slot is given,
690
    some window is made active.
756
    some window is made active.
691
  * To find out, which window is active, use subfunction 7.
757
  * To find out, which window is active, use subfunction 7.
-
 
758
 
-
 
759
---------------------- Constants for registers: ----------------------
-
 
760
  eax - SF_SYSTEM (18)
692
 
761
  ebx - SSF_FOCUS_WINDOW (3)
693
======================================================================
762
======================================================================
694
===================== Function 18, subfunction 4 =====================
763
===================== Function 18, subfunction 4 =====================
695
=========== Get counter of idle time units per one second. ===========
764
=========== Get counter of idle time units per one second. ===========
696
======================================================================
765
======================================================================
697
Idle time units are units, in which the processor stands idle
766
Idle time units are units, in which the processor stands idle
698
in waiting for interrupt (in the command 'hlt').
767
in waiting for interrupt (in the command 'hlt').
699
 
768
 
700
Parameters:
769
Parameters:
701
  * eax = 18 - function number
770
  * eax = 18 - function number
702
  * ebx = 4 - subfunction number
771
  * ebx = 4 - subfunction number
703
Returned value:
772
Returned value:
704
  * eax = value of the counter of idle time units per one second
773
  * eax = value of the counter of idle time units per one second
-
 
774
 
-
 
775
---------------------- Constants for registers: ----------------------
-
 
776
  eax - SF_SYSTEM (18)
705
 
777
  ebx - SSF_GET_IDLE_COUNT (4)
706
======================================================================
778
======================================================================
707
========== Function 18, subfunction 5 - get CPU clock rate. ==========
779
========== Function 18, subfunction 5 - get CPU clock rate. ==========
708
======================================================================
780
======================================================================
709
Parameters:
781
Parameters:
710
  * eax = 18 - function number
782
  * eax = 18 - function number
711
  * ebx = 5 - subfunction number
783
  * ebx = 5 - subfunction number
712
Returned value:
784
Returned value:
713
  * eax = clock rate (modulo 2^32 clock ticks = 4GHz)
785
  * eax = clock rate (modulo 2^32 clock ticks = 4GHz)
-
 
786
 
-
 
787
---------------------- Constants for registers: ----------------------
-
 
788
  eax - SF_SYSTEM (18)
714
 
789
  ebx - SSF_GET_CPU_REQUENCY (5)
715
======================================================================
790
======================================================================
716
 Function 18, subfunction 6 - save ramdisk to the file on hard drive.
791
 Function 18, subfunction 6 - save ramdisk to the file on hard drive.
717
======================================================================
792
======================================================================
718
Parameters:
793
Parameters:
719
  * eax = 18 - function number
794
  * eax = 18 - function number
720
  * ebx = 6 - subfunction number
795
  * ebx = 6 - subfunction number
721
  * ecx = pointer to the full path to file
796
  * ecx = pointer to the full path to file
722
    (for example, "/hd0/1/kolibri/kolibri.img")
797
    (for example, "/hd0/1/kolibri/kolibri.img")
723
Returned value:
798
Returned value:
724
  * eax = 0 - success
799
  * eax = 0 - success
725
  * else eax = error code of the file system
800
  * else eax = error code of the file system
726
Remarks:
801
Remarks:
727
  * All folders in the given path must exist, otherwise function
802
  * All folders in the given path must exist, otherwise function
728
    returns value 5, "file not found".
803
    returns value 5, "file not found".
-
 
804
 
-
 
805
---------------------- Constants for registers: ----------------------
-
 
806
  eax - SF_SYSTEM (18)
729
 
807
  ebx - SSF_RD_TO_HDD (6)
730
======================================================================
808
======================================================================
731
=========== Function 18, subfunction 7 - get active window. ==========
809
=========== Function 18, subfunction 7 - get active window. ==========
732
======================================================================
810
======================================================================
733
Parameters:
811
Parameters:
734
  * eax = 18 - function number
812
  * eax = 18 - function number
735
  * ebx = 7 - subfunction number
813
  * ebx = 7 - subfunction number
736
Returned value:
814
Returned value:
737
  * eax = number of the active window
815
  * eax = number of the active window
738
    (number of the slot of the thread with active window)
816
    (number of the slot of the thread with active window)
739
Remarks:
817
Remarks:
740
  * Active window is at the top of the window stack and receives
818
  * Active window is at the top of the window stack and receives
741
    messages on all keyboard input.
819
    messages on all keyboard input.
742
  * To make a window active, use subfunction 3.
820
  * To make a window active, use subfunction 3.
-
 
821
 
-
 
822
---------------------- Constants for registers: ----------------------
-
 
823
  eax - SF_SYSTEM (18)
743
 
824
  ebx - SSF_GET_ACTIVE_WINDOW (7)
744
======================================================================
825
======================================================================
745
== Function 18, subfunction 8 - disable/enable the internal speaker. =
826
== Function 18, subfunction 8 - disable/enable the internal speaker. =
746
======================================================================
827
======================================================================
747
If speaker sound is disabled, all calls to subfunction 55 of
828
If speaker sound is disabled, all calls to subfunction 55 of
748
function 55 are ignored. If speaker sound is enabled,
829
function 55 are ignored. If speaker sound is enabled,
749
they are routed on builtin speaker.
830
they are routed on builtin speaker.
750
 
831
 
751
------------------- Subsubfunction 1 - get status. -------------------
832
------------------- Subsubfunction 1 - get status. -------------------
752
Parameters:
833
Parameters:
753
  * eax = 18 - function number
834
  * eax = 18 - function number
754
  * ebx = 8 - subfunction number
835
  * ebx = 8 - subfunction number
755
  * ecx = 1 - number of the subsubfunction
836
  * ecx = 1 - number of the subsubfunction
756
Returned value:
837
Returned value:
757
  * eax = 0 - speaker sound is enabled; 1 - disabled
838
  * eax = 0 - speaker sound is enabled; 1 - disabled
758
 
839
 
759
----------------- Subsubfunction 2 - toggle status. ------------------
840
----------------- Subsubfunction 2 - toggle status. ------------------
760
Toggles states of disable/enable.
841
Toggles states of disable/enable.
761
Parameters:
842
Parameters:
762
  * eax = 18 - function number
843
  * eax = 18 - function number
763
  * ebx = 8 - subfunction number
844
  * ebx = 8 - subfunction number
764
  * ecx = 2 - number of the subsubfunction
845
  * ecx = 2 - number of the subsubfunction
765
Returned value:
846
Returned value:
766
  * function does not return value
847
  * function does not return value
-
 
848
 
-
 
849
---------------------- Constants for registers: ----------------------
-
 
850
  eax - SF_SYSTEM (18)
-
 
851
  ebx - SSF_SPEAKER (8)
767
 
852
  ecx - SSSF_GET_STATE (1), SSSF_TOGGLE (2)
768
======================================================================
853
======================================================================
769
== Function 18, subfunction 9 - system shutdown with the parameter. ==
854
== Function 18, subfunction 9 - system shutdown with the parameter. ==
770
======================================================================
855
======================================================================
771
Parameters:
856
Parameters:
772
  * eax = 18 - function number
857
  * eax = 18 - function number
773
  * ebx = 9 - subfunction number
858
  * ebx = 9 - subfunction number
774
  * ecx = parameter:
859
  * ecx = parameter:
775
    * 2 = turn off computer
860
    * 2 = turn off computer
776
    * 3 = reboot computer
861
    * 3 = reboot computer
777
    * 4 = restart the kernel from the file 'kernel.mnt' on ramdisk
862
    * 4 = restart the kernel from the file 'kernel.mnt' on ramdisk
778
Returned value:
863
Returned value:
779
  * at incorrect ecx the registers do not change (i.e. eax=18)
864
  * at incorrect ecx the registers do not change (i.e. eax=18)
780
  * by correct call function always returns eax=0
865
  * by correct call function always returns eax=0
781
    as the tag of success
866
    as the tag of success
782
Remarks:
867
Remarks:
783
  * Do not rely on returned value by incorrect call, it can be
868
  * Do not rely on returned value by incorrect call, it can be
784
    changed in future versions of the kernel.
869
    changed in future versions of the kernel.
-
 
870
 
-
 
871
---------------------- Constants for registers: ----------------------
-
 
872
  eax - SF_SYSTEM (18)
785
 
873
  ebx - SSF_SHUTDOWN (9)
786
======================================================================
874
======================================================================
787
======= Function 18, subfunction 10 - minimize topmost window. =======
875
======= Function 18, subfunction 10 - minimize topmost window. =======
788
======================================================================
876
======================================================================
789
Minimizes the topmost (active) window.
877
Minimizes the topmost (active) window.
790
Parameters:
878
Parameters:
791
  * eax = 18 - function number
879
  * eax = 18 - function number
792
  * ebx = 10 - subfunction number
880
  * ebx = 10 - subfunction number
793
Returned value:
881
Returned value:
794
  * function does not return value
882
  * function does not return value
795
Remarks:
883
Remarks:
796
  * The minimized window from the point of view of function 9
884
  * The minimized window from the point of view of function 9
797
    keeps position and sizes.
885
    keeps position and sizes.
798
  * Restoring of an application window occurs at its activation by
886
  * Restoring of an application window occurs at its activation by
799
    subfunction 3.
887
    subfunction 3.
800
  * Usually there is no necessity to minimize/restore a window
888
  * Usually there is no necessity to minimize/restore a window
801
    explicitly: minimization of a window is carried out by the system
889
    explicitly: minimization of a window is carried out by the system
802
    at pressing the minimization button (for skinned windows
890
    at pressing the minimization button (for skinned windows
803
    it is defined automatically by function 0,
891
    it is defined automatically by function 0,
804
    for other windows it can be defined manually by function 8),
892
    for other windows it can be defined manually by function 8),
805
    restore of a window is done by the application '@taskbar'.
893
    restore of a window is done by the application '@taskbar'.
-
 
894
 
-
 
895
---------------------- Constants for registers: ----------------------
-
 
896
  eax - SF_SYSTEM (18)
806
 
897
  ebx - SSF_MINIMIZE_WINDOW (10)
807
======================================================================
898
======================================================================
808
 Function 18, subfunction 11 - get information on the disk subsystem.
899
 Function 18, subfunction 11 - get information on the disk subsystem.
809
======================================================================
900
======================================================================
810
Parameters:
901
Parameters:
811
  * eax = 18 - function number
902
  * eax = 18 - function number
812
  * ebx = 11 - subfunction number
903
  * ebx = 11 - subfunction number
813
  * ecx = type of the table:
904
  * ecx = type of the table:
814
    * 1 = short version, 16 bytes
905
    * 1 = short version, 16 bytes
815
  * edx = pointer to the buffer (in the application) for the table
906
  * edx = pointer to the buffer (in the application) for the table
816
Returned value:
907
Returned value:
817
  * function does not return value
908
  * function does not return value
818
Format of the table: short version:
909
Format of the table: short version:
819
  * +0: byte: information about FDD's (drives for floppies),
910
  * +0: byte: information about FDD's (drives for floppies),
820
    AAAABBBB, where AAAA gives type of the first drive, BBBB -
911
    AAAABBBB, where AAAA gives type of the first drive, BBBB -
821
    of the second regarding to the following list:
912
    of the second regarding to the following list:
822
    * 0 = there is no drive
913
    * 0 = there is no drive
823
    * 1 = 360Kb, 5.25''
914
    * 1 = 360Kb, 5.25''
824
    * 2 = 1.2Mb, 5.25''
915
    * 2 = 1.2Mb, 5.25''
825
    * 3 = 720Kb, 3.5''
916
    * 3 = 720Kb, 3.5''
826
    * 4 = 1.44Mb, 3.5''
917
    * 4 = 1.44Mb, 3.5''
827
    * 5 = 2.88Mb, 3.5'' (such drives are not used anymore)
918
    * 5 = 2.88Mb, 3.5'' (such drives are not used anymore)
828
    For example, for the standard configuration from one 1.44-drive
919
    For example, for the standard configuration from one 1.44-drive
829
    here will be 40h, and for the case 1.2Mb on A: and 1.44Mb on B:
920
    here will be 40h, and for the case 1.2Mb on A: and 1.44Mb on B:
830
    the value is 24h.
921
    the value is 24h.
831
    
922
    
832
  First IDE controller:
923
  First IDE controller:
833
  * +1: byte: information about hard disks and CD-drives, AABBCCDD,
924
  * +1: byte: information about hard disks and CD-drives, AABBCCDD,
834
    where AA corresponds to the controller IDE0, ..., DD - IDE3:
925
    where AA corresponds to the controller IDE0, ..., DD - IDE3:
835
    * 0 = device not found
926
    * 0 = device not found
836
    * 1 = hard drive
927
    * 1 = hard drive
837
    * 2 = CD-drive
928
    * 2 = CD-drive
838
    For example, in the case HD on IDE0 and CD on IDE2
929
    For example, in the case HD on IDE0 and CD on IDE2
839
    this field contains 48h.
930
    this field contains 48h.
840
  * +2: 4 db: number of the retrieved partitions on hard disks
931
  * +2: 4 db: number of the retrieved partitions on hard disks
841
    at accordingly IDE0,...,IDE3.
932
    at accordingly IDE0,...,IDE3.
842
    
933
    
843
  Second IDE controller:
934
  Second IDE controller:
844
  * +6: byte: information about hard disks and CD-drives, AABBCCDD,
935
  * +6: byte: information about hard disks and CD-drives, AABBCCDD,
845
    where AA corresponds to the controller IDE4, ..., DD - IDE7:
936
    where AA corresponds to the controller IDE4, ..., DD - IDE7:
846
    * 0 = device not found
937
    * 0 = device not found
847
    * 1 = hard drive
938
    * 1 = hard drive
848
    * 2 = CD-drive
939
    * 2 = CD-drive
849
    For example, in the case HD on IDE4 and CD on IDE6
940
    For example, in the case HD on IDE4 and CD on IDE6
850
    this field contains 48h.
941
    this field contains 48h.
851
  * +7: 4 db: number of the retrieved partitions on hard disks
942
  * +7: 4 db: number of the retrieved partitions on hard disks
852
    at accordingly IDE4,...,IDE7.
943
    at accordingly IDE4,...,IDE7.
853
 
944
 
854
  Third IDE controller:
945
  Third IDE controller:
855
  * +11: byte: information about hard disks and CD-drives, AABBCCDD,
946
  * +11: byte: information about hard disks and CD-drives, AABBCCDD,
856
    where AA corresponds to the controller IDE8, ..., DD - IDE11:
947
    where AA corresponds to the controller IDE8, ..., DD - IDE11:
857
    * 0 = device not found
948
    * 0 = device not found
858
    * 1 = hard drive
949
    * 1 = hard drive
859
    * 2 = CD-drive
950
    * 2 = CD-drive
860
    For example, in the case HD on IDE8 and CD on IDE10
951
    For example, in the case HD on IDE8 and CD on IDE10
861
    this field contains 48h.
952
    this field contains 48h.
862
  * +12: 4 db: number of the retrieved partitions on hard disks
953
  * +12: 4 db: number of the retrieved partitions on hard disks
863
    at accordingly IDE8,...,IDE11.   
954
    at accordingly IDE8,...,IDE11.   
864
    
955
    
865
    If the hard disk on IDEx is absent, appropriate byte is zero,
956
    If the hard disk on IDEx is absent, appropriate byte is zero,
866
    otherwise it shows number of the recognized partitions, which
957
    otherwise it shows number of the recognized partitions, which
867
    can be not presented (if the drive is not formatted or if
958
    can be not presented (if the drive is not formatted or if
868
    the file system is not supported). Current version of the kernel
959
    the file system is not supported). Current version of the kernel
869
    supports only FAT12/16/32, NTFS, ext2/3/4 and XFS for hard disks.
960
    supports only FAT12/16/32, NTFS, ext2/3/4 and XFS for hard disks.
870
 
961
 
871
Remarks:
962
Remarks:
872
  * The table can be used for obtaining the information about
963
  * The table can be used for obtaining the information about
873
    available devices.
964
    available devices.
-
 
965
 
-
 
966
---------------------- Constants for registers: ----------------------
-
 
967
  eax - SF_SYSTEM (18)
874
 
968
  ebx - SSF_INFO_DISC_SYS (11)
875
======================================================================
969
======================================================================
876
========== Function 18, subfunction 13 - get kernel version. =========
970
========== Function 18, subfunction 13 - get kernel version. =========
877
======================================================================
971
======================================================================
878
Parameters:
972
Parameters:
879
  * eax = 18 - function number
973
  * eax = 18 - function number
880
  * ebx = 13 - subfunction number
974
  * ebx = 13 - subfunction number
881
  * ecx = pointer to the buffer (not less than 16 bytes), where
975
  * ecx = pointer to the buffer (not less than 16 bytes), where
882
    the information will be placed
976
    the information will be placed
883
Returned value:
977
Returned value:
884
  * function does not return value
978
  * function does not return value
885
Structure of the buffer:
979
Structure of the buffer:
886
db a,b,c,d for version a.b.c.d
980
db a,b,c,d for version a.b.c.d
887
db 0: reserved
981
db 0: reserved
888
dd REV - kernel SVN revision number
982
dd REV - kernel SVN revision number
889
For Kolibri 0.7.7.0+ kernel:
983
For Kolibri 0.7.7.0+ kernel:
890
db 0,7,7,0
984
db 0,7,7,0
891
db 0
985
db 0
892
dd 1675
986
dd 1675
-
 
987
 
-
 
988
---------------------- Constants for registers: ----------------------
-
 
989
  eax - SF_SYSTEM (18)
893
 
990
  ebx - SSF_KERNEL_VERSION (13)
894
======================================================================
991
======================================================================
895
======= Function 18, subfunction 14 - wait for screen retrace. =======
992
======= Function 18, subfunction 14 - wait for screen retrace. =======
896
======================================================================
993
======================================================================
897
Waits for the beginning of retrace of the scanning ray of the screen
994
Waits for the beginning of retrace of the scanning ray of the screen
898
monitor.
995
monitor.
899
Parameters:
996
Parameters:
900
  * eax = 18 - function number
997
  * eax = 18 - function number
901
  * ebx = 14 - subfunction number
998
  * ebx = 14 - subfunction number
902
Returned value:
999
Returned value:
903
  * eax = 0 as the tag of success
1000
  * eax = 0 as the tag of success
904
Remarks:
1001
Remarks:
905
  * Function is intended only for active high-efficiency graphics
1002
  * Function is intended only for active high-efficiency graphics
906
    applications; is used for smooth output of a graphics.
1003
    applications; is used for smooth output of a graphics.
-
 
1004
 
-
 
1005
---------------------- Constants for registers: ----------------------
-
 
1006
  eax - SF_SYSTEM (18)
907
 
1007
  ebx - SSF_WAIT_RETRACE (14)
908
======================================================================
1008
======================================================================
909
== Function 18, subfunction 15 - center mouse cursor on the screen. ==
1009
== Function 18, subfunction 15 - center mouse cursor on the screen. ==
910
======================================================================
1010
======================================================================
911
Parameters:
1011
Parameters:
912
  * eax = 18 - function number
1012
  * eax = 18 - function number
913
  * ebx = 15 - subfunction number
1013
  * ebx = 15 - subfunction number
914
Returned value:
1014
Returned value:
915
  * eax = 0 as the tag of success
1015
  * eax = 0 as the tag of success
-
 
1016
 
-
 
1017
---------------------- Constants for registers: ----------------------
-
 
1018
  eax - SF_SYSTEM (18)
916
 
1019
  ebx - SSF_CURSOR_CENTER (15)
917
======================================================================
1020
======================================================================
918
========= Function 18, subfunction 16 - get size of free RAM. ========
1021
========= Function 18, subfunction 16 - get size of free RAM. ========
919
======================================================================
1022
======================================================================
920
Parameters:
1023
Parameters:
921
  * eax = 18 - function number
1024
  * eax = 18 - function number
922
  * ebx = 16 - subfunction number
1025
  * ebx = 16 - subfunction number
923
Returned value:
1026
Returned value:
924
  * eax = size of free memory in kilobytes
1027
  * eax = size of free memory in kilobytes
-
 
1028
 
-
 
1029
---------------------- Constants for registers: ----------------------
-
 
1030
  eax - SF_SYSTEM (18)
925
 
1031
  ebx - SSF_GET_FREE_RAM (16)
926
======================================================================
1032
======================================================================
927
======== Function 18, subfunction 17 - get full amount of RAM. =======
1033
======== Function 18, subfunction 17 - get full amount of RAM. =======
928
======================================================================
1034
======================================================================
929
Parameters:
1035
Parameters:
930
  * eax = 18 - function number
1036
  * eax = 18 - function number
931
  * ebx = 17 - subfunction number
1037
  * ebx = 17 - subfunction number
932
Returned value:
1038
Returned value:
933
  * eax = total size of existing memory in kilobytes
1039
  * eax = total size of existing memory in kilobytes
-
 
1040
 
-
 
1041
---------------------- Constants for registers: ----------------------
-
 
1042
  eax - SF_SYSTEM (18)
934
 
1043
  ebx - SSF_GET_TOTAL_RAM (17)
935
======================================================================
1044
======================================================================
936
===================== Function 18, subfunction 18 ====================
1045
===================== Function 18, subfunction 18 ====================
937
============= Terminate process/thread by the identifier. ============
1046
============= Terminate process/thread by the identifier. ============
938
======================================================================
1047
======================================================================
939
Parameters:
1048
Parameters:
940
  * eax = 18 - function number
1049
  * eax = 18 - function number
941
  * ebx = 18 - subfunction number
1050
  * ebx = 18 - subfunction number
942
  * ecx = identifer of process/thread (PID/TID)
1051
  * ecx = identifer of process/thread (PID/TID)
943
Returned value:
1052
Returned value:
944
  * eax = 0 - success
1053
  * eax = 0 - success
945
  * eax = -1 - error (process is not found or is system)
1054
  * eax = -1 - error (process is not found or is system)
946
Remarks:
1055
Remarks:
947
  * It is impossible to terminate system thread OS/IDLE (identifier
1056
  * It is impossible to terminate system thread OS/IDLE (identifier
948
    1), it is possible to terminate any normal process/thread.
1057
    1), it is possible to terminate any normal process/thread.
949
  * See also subfunction 2 - terminate
1058
  * See also subfunction 2 - terminate
950
    process/thread by given slot.
1059
    process/thread by given slot.
-
 
1060
 
-
 
1061
---------------------- Constants for registers: ----------------------
-
 
1062
  eax - SF_SYSTEM (18)
951
 
1063
  ebx - SSF_TERMINATE_THREAD_ID (18)
952
======================================================================
1064
======================================================================
953
======== Function 18, subfunction 19 - get/set mouse features. =======
1065
======== Function 18, subfunction 19 - get/set mouse features. =======
954
======================================================================
1066
======================================================================
955
 
1067
 
956
---------------- Subsubfunction 0 - get mouse speed. -----------------
1068
---------------- Subsubfunction 0 - get mouse speed. -----------------
957
Parameters:
1069
Parameters:
958
  * eax = 18 - function number
1070
  * eax = 18 - function number
959
  * ebx = 19 - subfunction number
1071
  * ebx = 19 - subfunction number
960
  * ecx = 0 - subsubfunction number
1072
  * ecx = 0 - subsubfunction number
961
Returned value:
1073
Returned value:
962
  * eax = current mouse speed
1074
  * eax = current mouse speed
963
 
1075
 
964
---------------- Subsubfunction 1 - set mouse speed. -----------------
1076
---------------- Subsubfunction 1 - set mouse speed. -----------------
965
Parameters:
1077
Parameters:
966
  * eax = 18 - function number
1078
  * eax = 18 - function number
967
  * ebx = 19 - subfunction number
1079
  * ebx = 19 - subfunction number
968
  * ecx = 1 - subsubfunction number
1080
  * ecx = 1 - subsubfunction number
969
  * edx = new value for speed
1081
  * edx = new value for speed
970
Returned value:
1082
Returned value:
971
  * function does not return value
1083
  * function does not return value
972
 
1084
 
973
Remark: recommended speed = 1, 0 = lock the cursor.
1085
Remark: recommended speed = 1, 0 = lock the cursor.
974
 
1086
 
975
------------- Subsubfunction 2 - get mouse acceleration. -------------
1087
------------- Subsubfunction 2 - get mouse acceleration. -------------
976
Parameters:
1088
Parameters:
977
  * eax = 18 - function number
1089
  * eax = 18 - function number
978
  * ebx = 19 - subfunction number
1090
  * ebx = 19 - subfunction number
979
  * ecx = 2 - subsubfunction number
1091
  * ecx = 2 - subsubfunction number
980
Returned value:
1092
Returned value:
981
  * eax = 0 - off, 1 - slight, 2 - medium, 3 - intense
1093
  * eax = 0 - off, 1 - slight, 2 - medium, 3 - intense
982
 
1094
 
983
------------- Subsubfunction 3 - set mouse acceleration. -------------
1095
------------- Subsubfunction 3 - set mouse acceleration. -------------
984
Parameters:
1096
Parameters:
985
  * eax = 18 - function number
1097
  * eax = 18 - function number
986
  * ebx = 19 - subfunction number
1098
  * ebx = 19 - subfunction number
987
  * ecx = 3 - subsubfunction number
1099
  * ecx = 3 - subsubfunction number
988
  * edx = 0 - off, 1 - slight, 2 - medium, 3 - intense
1100
  * edx = 0 - off, 1 - slight, 2 - medium, 3 - intense
989
Returned value:
1101
Returned value:
990
  * function does not return value
1102
  * function does not return value
991
 
1103
 
992
----------- Subsubfunction 4 - set mouse pointer position. -----------
1104
----------- Subsubfunction 4 - set mouse pointer position. -----------
993
Parameters:
1105
Parameters:
994
  * eax = 18 - function number
1106
  * eax = 18 - function number
995
  * ebx = 19 - subfunction number
1107
  * ebx = 19 - subfunction number
996
  * ecx = 4 - subsubfunction number
1108
  * ecx = 4 - subsubfunction number
997
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1109
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
998
Returned value:
1110
Returned value:
999
  * function does not return value
1111
  * function does not return value
1000
 
1112
 
1001
-------- Subsubfunction 5 - simulate state of mouse buttons. ---------
1113
-------- Subsubfunction 5 - simulate state of mouse buttons. ---------
1002
Parameters:
1114
Parameters:
1003
  * eax = 18 - function number
1115
  * eax = 18 - function number
1004
  * ebx = 19 - subfunction number
1116
  * ebx = 19 - subfunction number
1005
  * ecx = 5 - subsubfunction number
1117
  * ecx = 5 - subsubfunction number
1006
  * edx = information about emulated state of mouse buttons:
1118
  * edx = information about emulated state of mouse buttons:
1007
    (same as return value in subfunction 2 of function 37)
1119
    (same as return value in subfunction 2 of function 37)
1008
    * bit 0 is set = left button is pressed
1120
    * bit 0 is set = left button is pressed
1009
    * bit 1 is set = right button is pressed
1121
    * bit 1 is set = right button is pressed
1010
    * bit 2 is set = middle button is pressed
1122
    * bit 2 is set = middle button is pressed
1011
    * bit 3 is set = 4th button is pressed
1123
    * bit 3 is set = 4th button is pressed
1012
    * bit 4 is set = 5th button is pressed
1124
    * bit 4 is set = 5th button is pressed
1013
Returned value:
1125
Returned value:
1014
  * function does not return value
1126
  * function does not return value
1015
 
1127
 
1016
-------------- Subsubfunction 6 - get doubleclick delay. -------------
1128
-------------- Subsubfunction 6 - get doubleclick delay. -------------
1017
Parameters:
1129
Parameters:
1018
  * eax = 18 - function number
1130
  * eax = 18 - function number
1019
  * ebx = 19 - subfunction number
1131
  * ebx = 19 - subfunction number
1020
  * ecx = 6 - subsubfunction number
1132
  * ecx = 6 - subsubfunction number
1021
Returned value:
1133
Returned value:
1022
  * eax = current doubleclick delay (100 = 1 second)
1134
  * eax = current doubleclick delay (100 = 1 second)
1023
 
1135
 
1024
-------------- Subsubfunction 7 - set doubleclick delay. -------------
1136
-------------- Subsubfunction 7 - set doubleclick delay. -------------
1025
Parameters:
1137
Parameters:
1026
  * eax = 18 - function number
1138
  * eax = 18 - function number
1027
  * ebx = 19 - subfunction number
1139
  * ebx = 19 - subfunction number
1028
  * ecx = 7 - subsubfunction number
1140
  * ecx = 7 - subsubfunction number
1029
  * dl  = new value for doubleclick delay (100 = 1 second)
1141
  * dl  = new value for doubleclick delay (100 = 1 second)
1030
Returned value:
1142
Returned value:
1031
  * function does not return value
1143
  * function does not return value
1032
 
1144
 
1033
Remark: mouse settings can be modified in the application mouse_cfg.
1145
Remark: mouse settings can be modified in the application mouse_cfg.
-
 
1146
 
-
 
1147
---------------------- Constants for registers: ----------------------
-
 
1148
  eax - SF_SYSTEM (18)
-
 
1149
  ebx - SSF_MOUSE_SETTINGS (19)
-
 
1150
  ecx - SSSF_GET_SPEED (0), SSSF_SET_SPEED (1), SSSF_GET_SPEEDUP (2),
-
 
1151
    SSSF_SET_SPEEDUP (3), SSSF_SET_POS (4), SSSF_SET_BUTTON (5),
1034
 
1152
    SSSF_GET_DOUBLE_CLICK_DELAY (6), SSSF_SET_DOUBLE_CLICK_DELAY (7)
1035
======================================================================
1153
======================================================================
1036
======== Function 18, subfunction 20 - get information on RAM. =======
1154
======== Function 18, subfunction 20 - get information on RAM. =======
1037
======================================================================
1155
======================================================================
1038
Parameters:
1156
Parameters:
1039
  * eax = 18 - function number
1157
  * eax = 18 - function number
1040
  * ebx = 20 - subfunction number
1158
  * ebx = 20 - subfunction number
1041
  * ecx = pointer to the buffer for information (36 bytes)
1159
  * ecx = pointer to the buffer for information (36 bytes)
1042
Returned value:
1160
Returned value:
1043
  * eax = total size of existing RAM in pages
1161
  * eax = total size of existing RAM in pages
1044
    or -1 if error has occured
1162
    or -1 if error has occured
1045
  * buffer pointed to by ecx contains the following information:
1163
  * buffer pointed to by ecx contains the following information:
1046
    * +0:  dword: total size of existing RAM in pages
1164
    * +0:  dword: total size of existing RAM in pages
1047
    * +4:  dword: size of free RAM in pages
1165
    * +4:  dword: size of free RAM in pages
1048
    * +8:  dword: number of page faults (exceptions #PF)
1166
    * +8:  dword: number of page faults (exceptions #PF)
1049
                 in applications
1167
                 in applications
1050
    * +12: dword: size of kernel heap in bytes
1168
    * +12: dword: size of kernel heap in bytes
1051
    * +16: dword: free in kernel heap in bytes
1169
    * +16: dword: free in kernel heap in bytes
1052
    * +20: dword: total number of memory blocks in kernel heap
1170
    * +20: dword: total number of memory blocks in kernel heap
1053
    * +24: dword: number of free memory blocks in kernel heap
1171
    * +24: dword: number of free memory blocks in kernel heap
1054
    * +28: dword: size of maximum free block in kernel heap
1172
    * +28: dword: size of maximum free block in kernel heap
1055
                 (reserved)
1173
                 (reserved)
1056
    * +32: dword: size of maximum allocated block in kernel heap
1174
    * +32: dword: size of maximum allocated block in kernel heap
1057
                 (reserved)
1175
                 (reserved)
-
 
1176
 
-
 
1177
---------------------- Constants for registers: ----------------------
-
 
1178
  eax - SF_SYSTEM (18)
1058
 
1179
  ebx - SSF_GET_RAM_INFO (20)
1059
======================================================================
1180
======================================================================
1060
===================== Function 18, subfunction 21 ====================
1181
===================== Function 18, subfunction 21 ====================
1061
======== Get slot number of process/thread by the identifier. ========
1182
======== Get slot number of process/thread by the identifier. ========
1062
======================================================================
1183
======================================================================
1063
Parameters:
1184
Parameters:
1064
  * eax = 18 - function number
1185
  * eax = 18 - function number
1065
  * ebx = 21 - subfunction number
1186
  * ebx = 21 - subfunction number
1066
  * ecx = identifer of process/thread (PID/TID)
1187
  * ecx = identifer of process/thread (PID/TID)
1067
Returned value:
1188
Returned value:
1068
  * eax = 0 - error (invalid identifier)
1189
  * eax = 0 - error (invalid identifier)
1069
  * otherwise eax = slot number
1190
  * otherwise eax = slot number
-
 
1191
 
-
 
1192
---------------------- Constants for registers: ----------------------
-
 
1193
  eax - SF_SYSTEM (18)
1070
 
1194
  ebx - SSF_GET_THREAD_SLOT (21)
1071
======================================================================
1195
======================================================================
1072
===================== Function 18, subfunction 22 ====================
1196
===================== Function 18, subfunction 22 ====================
1073
============== Operations with window of another thread. =============
1197
============== Operations with window of another thread. =============
1074
======================================================================
1198
======================================================================
1075
Parameters:
1199
Parameters:
1076
  * eax = 18 - function number
1200
  * eax = 18 - function number
1077
  * ebx = 22 - subfunction number
1201
  * ebx = 22 - subfunction number
1078
  * ecx = operation type:
1202
  * ecx = operation type:
1079
    * 0 = minimize window of the thread with given slot number
1203
    * 0 = minimize window of the thread with given slot number
1080
    * 1 = minimize window of the thread with given identifier
1204
    * 1 = minimize window of the thread with given identifier
1081
    * 2 = restore window of the thread with given slot number
1205
    * 2 = restore window of the thread with given slot number
1082
    * 3 = restore window of the thread with given identifier
1206
    * 3 = restore window of the thread with given identifier
1083
  * edx = parameter (slot number or PID/TID)
1207
  * edx = parameter (slot number or PID/TID)
1084
Returned value:
1208
Returned value:
1085
  * eax = 0 - success
1209
  * eax = 0 - success
1086
  * eax = -1 - error (invalid identifier)
1210
  * eax = -1 - error (invalid identifier)
1087
Remarks:
1211
Remarks:
1088
  * The thread can minimize its window with subfunction 10.
1212
  * The thread can minimize its window with subfunction 10.
1089
  * One can restore and activate window simultaneously with
1213
  * One can restore and activate window simultaneously with
1090
    subfunction 3 (which requires slot number).
1214
    subfunction 3 (which requires slot number).
-
 
1215
 
-
 
1216
---------------------- Constants for registers: ----------------------
-
 
1217
  eax - SF_SYSTEM (18)
-
 
1218
  ebx - SSF_FOREIGN_WINDOW (22)
-
 
1219
  ecx - SSSF_MINIMIZE (0), SSSF_MINIMIZE_ID (1), SSSF_RESTORE (2),
1091
 
1220
    SSSF_RESTORE_ID (3)
1092
======================================================================
1221
======================================================================
1093
======== Function 18, subfunction 23 - minimize all windows. ==========
1222
======== Function 18, subfunction 23 - minimize all windows. ==========
1094
======================================================================
1223
======================================================================
1095
Parameters:
1224
Parameters:
1096
  * eax = 18 - function number
1225
  * eax = 18 - function number
1097
  * ebx = 23 - subfunction number
1226
  * ebx = 23 - subfunction number
1098
Returned value:
1227
Returned value:
1099
  * eax = 0 - all windows have been minimized before a function call
1228
  * eax = 0 - all windows have been minimized before a function call
1100
  * eax = N - number of windows minimized from function
1229
  * eax = N - number of windows minimized from function
1101
Remarks:
1230
Remarks:
1102
  * Window of special thread (name begin to symbol @) is not minimize.
1231
  * Window of special thread (name begin to symbol @) is not minimize.
-
 
1232
 
-
 
1233
---------------------- Constants for registers: ----------------------
-
 
1234
  eax - SF_SYSTEM (18)
1103
 
1235
  ebx - SSF_MINIMIZE_ALL (23)
1104
======================================================================
1236
======================================================================
1105
======= Function 18, subfunction 24 - set limits of screen. ==========
1237
======= Function 18, subfunction 24 - set limits of screen. ==========
1106
======================================================================
1238
======================================================================
1107
Parameters:
1239
Parameters:
1108
  * eax = 18 - function number
1240
  * eax = 18 - function number
1109
  * ebx = 24 - subfunction number
1241
  * ebx = 24 - subfunction number
1110
  * ecx = new X size
1242
  * ecx = new X size
1111
  * edx = new Y size
1243
  * edx = new Y size
1112
Returned value:
1244
Returned value:
1113
  * function does not return value
1245
  * function does not return value
1114
Remarks:
1246
Remarks:
1115
  * The function does not change the physical size of the video mode.
1247
  * The function does not change the physical size of the video mode.
1116
    It is designed for non-standard displays which display the image
1248
    It is designed for non-standard displays which display the image
1117
    partially.
1249
    partially.
1118
  * The sizes specified in the function should not exceed the sizes
1250
  * The sizes specified in the function should not exceed the sizes
1119
    of the current video mode, otherwise the function will not change
1251
    of the current video mode, otherwise the function will not change
1120
    anything.
1252
    anything.
-
 
1253
 
-
 
1254
---------------------- Constants for registers: ----------------------
-
 
1255
  eax - SF_SYSTEM (18)
1121
 
1256
  ebx - SSF_SET_SCREEN_LIMITS (24)
1122
======================================================================
1257
======================================================================
1123
===================== Function 18, subfunction 25 ====================
1258
===================== Function 18, subfunction 25 ====================
1124
===== Control position of the window relative to other windows. ======
1259
===== Control position of the window relative to other windows. ======
1125
======================================================================
1260
======================================================================
1126
 
1261
 
1127
------------- Subsubfunction 1 - get position  -----------------------
1262
------------- Subsubfunction 1 - get position  -----------------------
1128
Parameters:
1263
Parameters:
1129
  * eax = 18 - function number
1264
  * eax = 18 - function number
1130
  * ebx = 25 - subfunction number
1265
  * ebx = 25 - subfunction number
1131
  * ecx = 1 - subsubfunction number
1266
  * ecx = 1 - subsubfunction number
1132
  * edx = -1(for current window) or PID application
1267
  * edx = -1(for current window) or PID application
1133
Returned value:
1268
Returned value:
1134
  * eax = one of the constants window position
1269
  * eax = one of the constants window position
1135
 
1270
 
1136
------------- Subsubfunction 2 - set position  -----------------------
1271
------------- Subsubfunction 2 - set position  -----------------------
1137
Parameters:
1272
Parameters:
1138
  * eax = 18 - function number
1273
  * eax = 18 - function number
1139
  * ebx = 25 - subfunction number
1274
  * ebx = 25 - subfunction number
1140
  * ecx = 2 - subsubfunction number
1275
  * ecx = 2 - subsubfunction number
1141
  * edx = -1(for current window) or PID application
1276
  * edx = -1(for current window) or PID application
1142
  * esi = new window position (one of the constants below)
1277
  * esi = new window position (one of the constants below)
1143
Returned value:
1278
Returned value:
1144
  * eax = 0 - error
1279
  * eax = 0 - error
1145
  * eax = 1 - success
1280
  * eax = 1 - success
1146
 
1281
 
1147
Constant position of the window relative to other windows:
1282
Constant position of the window relative to other windows:
1148
 ZPOS_DESKTOP     = -2 - on the background
1283
 ZPOS_DESKTOP     = -2 - on the background
1149
 ZPOS_ALWAYS_BACK = -1 - behind all the windows
1284
 ZPOS_ALWAYS_BACK = -1 - behind all the windows
1150
 ZPOS_NORMAL      = 0  - normal
1285
 ZPOS_NORMAL      = 0  - normal
1151
 ZPOS_ALWAYS_TOP  = 1  - on top of all windows
1286
 ZPOS_ALWAYS_TOP  = 1  - on top of all windows
-
 
1287
 
-
 
1288
---------------------- Constants for registers: ----------------------
-
 
1289
  eax - SF_SYSTEM (18)
-
 
1290
  ebx - SSF_WINDOW_BEHAVIOR (25)
1152
 
1291
  ecx - SSSF_GET_WB (1), SSSF_SET_WB (2)
1153
======================================================================
1292
======================================================================
1154
==================== Function 20 - MIDI interface. ===================
1293
==================== Function 20 - MIDI interface. ===================
1155
======================================================================
1294
======================================================================
1156
 
1295
 
1157
----------------------- Subfunction 1 - reset ------------------------
1296
----------------------- Subfunction 1 - reset ------------------------
1158
Parameters:
1297
Parameters:
1159
  * eax = 20 - function number
1298
  * eax = 20 - function number
1160
  * ebx = 1 - subfunction number
1299
  * ebx = 1 - subfunction number
1161
 
1300
 
1162
-------------------- Subfunction 2 - output byte ---------------------
1301
-------------------- Subfunction 2 - output byte ---------------------
1163
Parameters:
1302
Parameters:
1164
  * eax = 20 - function number
1303
  * eax = 20 - function number
1165
  * ebx = 2 - subfunction number
1304
  * ebx = 2 - subfunction number
1166
  * cl = byte for output
1305
  * cl = byte for output
1167
Returned value (is the same for both subfunctions):
1306
Returned value (is the same for both subfunctions):
1168
  * eax = 0 - success
1307
  * eax = 0 - success
1169
  * eax = 1 - base port is not defined
1308
  * eax = 1 - base port is not defined
1170
Remarks:
1309
Remarks:
1171
  * Previously the base port must be defined by
1310
  * Previously the base port must be defined by
1172
    subfunction 1 of function 21.
1311
    subfunction 1 of function 21.
-
 
1312
 
-
 
1313
---------------------- Constants for registers: ----------------------
-
 
1314
  eax - SF_MIDI (20)
1173
 
1315
  ebx - SSF_RESET (1), SSF_OUTPUT (2)
1174
======================================================================
1316
======================================================================
1175
======== Function 21, subfunction 1 - set MPU MIDI base port. ========
1317
======== Function 21, subfunction 1 - set MPU MIDI base port. ========
1176
======================================================================
1318
======================================================================
1177
Parameters:
1319
Parameters:
1178
  * eax = 21 - function number
1320
  * eax = 21 - function number
1179
  * ebx = 1 - subfunction number
1321
  * ebx = 1 - subfunction number
1180
  * ecx = number of base port
1322
  * ecx = number of base port
1181
Returned value
1323
Returned value
1182
  * eax = 0 - success
1324
  * eax = 0 - success
1183
  * eax = -1 - erratic number of a port
1325
  * eax = -1 - erratic number of a port
1184
Remarks:
1326
Remarks:
1185
  * Number of a port must satisfy to conditions 0x100<=ecx<=0xFFFF.
1327
  * Number of a port must satisfy to conditions 0x100<=ecx<=0xFFFF.
1186
  * The installation of base is necessary for function 20.
1328
  * The installation of base is necessary for function 20.
1187
  * To get base port use subfunction 1 of function 26.
1329
  * To get base port use subfunction 1 of function 26.
-
 
1330
 
-
 
1331
---------------------- Constants for registers: ----------------------
-
 
1332
  eax - SF_SYSTEM_SET (21)
1188
 
1333
  ebx - SSF_MPU_MIDI_BASE (1)
1189
======================================================================
1334
======================================================================
1190
========== Function 21, subfunction 2 - set keyboard layout. =========
1335
========== Function 21, subfunction 2 - set keyboard layout. =========
1191
======================================================================
1336
======================================================================
1192
Keyboard layout is used to convert keyboard scancodes to ASCII-codes,
1337
Keyboard layout is used to convert keyboard scancodes to ASCII-codes,
1193
which will be read by function 2.
1338
which will be read by function 2.
1194
Parameters:
1339
Parameters:
1195
  * eax = 21 - function number
1340
  * eax = 21 - function number
1196
  * ebx = 2 - subfunction number
1341
  * ebx = 2 - subfunction number
1197
  * ecx = which layout to set:
1342
  * ecx = which layout to set:
1198
    * 1 = normal layout
1343
    * 1 = normal layout
1199
    * 2 = layout at pressed Shift
1344
    * 2 = layout at pressed Shift
1200
    * 3 = layout at pressed Alt
1345
    * 3 = layout at pressed Alt
1201
  * edx = pointer to layout - table of length 128 bytes
1346
  * edx = pointer to layout - table of length 128 bytes
1202
Or:
1347
Or:
1203
  * ecx = 9
1348
  * ecx = 9
1204
  * dx = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1349
  * dx = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1205
Returned value:
1350
Returned value:
1206
  * eax = 0 - success
1351
  * eax = 0 - success
1207
  * eax = 1 - incorrect parameter
1352
  * eax = 1 - incorrect parameter
1208
Remarks:
1353
Remarks:
1209
  * If Alt is pressed, the layout with Alt is used;
1354
  * If Alt is pressed, the layout with Alt is used;
1210
    if Alt is not pressed, but Shift is pressed,
1355
    if Alt is not pressed, but Shift is pressed,
1211
    the layout with Shift is used;
1356
    the layout with Shift is used;
1212
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1357
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1213
    layout is used and then from the code is subtracted 0x60;
1358
    layout is used and then from the code is subtracted 0x60;
1214
    if no control key is pressed, the normal layout is used.
1359
    if no control key is pressed, the normal layout is used.
1215
  * To get layout and country identifier use
1360
  * To get layout and country identifier use
1216
    subfunction 2 of function 26.
1361
    subfunction 2 of function 26.
1217
  * Country identifier is global system variable, which is not used
1362
  * Country identifier is global system variable, which is not used
1218
    by the kernel itself; however the application '@taskbar' displays
1363
    by the kernel itself; however the application '@taskbar' displays
1219
    the corresponding icon.
1364
    the corresponding icon.
1220
  * The application @taskbar switches layouts on user request.
1365
  * The application @taskbar switches layouts on user request.
-
 
1366
 
-
 
1367
---------------------- Constants for registers: ----------------------
-
 
1368
  eax - SF_SYSTEM_SET (21)
1221
 
1369
  ebx - SSF_KEYBOARD_LAYOUT (2)
1222
======================================================================
1370
======================================================================
1223
========== Function 21, subfunction 5 - set system language. =========
1371
========== Function 21, subfunction 5 - set system language. =========
1224
======================================================================
1372
======================================================================
1225
Parameters:
1373
Parameters:
1226
  * eax = 21 - function number
1374
  * eax = 21 - function number
1227
  * ebx = 5 - subfunction number
1375
  * ebx = 5 - subfunction number
1228
  * ecx = system language (1=eng, 2=fi, 3=ger, 4=rus)
1376
  * ecx = system language (1=eng, 2=fi, 3=ger, 4=rus)
1229
Returned value:
1377
Returned value:
1230
  * eax = 0
1378
  * eax = 0
1231
Remarks:
1379
Remarks:
1232
  * System language is global system variable and is not used
1380
  * System language is global system variable and is not used
1233
    by the kernel itself, however application @taskbar draws the
1381
    by the kernel itself, however application @taskbar draws the
1234
    appropriate icon.
1382
    appropriate icon.
1235
  * Function does not check for correctness, as the kernel does not
1383
  * Function does not check for correctness, as the kernel does not
1236
    use this variable.
1384
    use this variable.
1237
  * To get system language use subfunction 5 of function 26.
1385
  * To get system language use subfunction 5 of function 26.
-
 
1386
 
-
 
1387
---------------------- Constants for registers: ----------------------
-
 
1388
  eax - SF_SYSTEM_SET (21)
1238
 
1389
  ebx - SSF_SYS_LANG (5)
1239
======================================================================
1390
======================================================================
1240
 Function 21, subfunction 11 - enable/disable low-level access to HD.
1391
 Function 21, subfunction 11 - enable/disable low-level access to HD.
1241
======================================================================
1392
======================================================================
1242
Parameters:
1393
Parameters:
1243
  * eax = 21 - function number
1394
  * eax = 21 - function number
1244
  * ebx = 11 - subfunction number
1395
  * ebx = 11 - subfunction number
1245
  * ecx = 0/1 - disable/enable
1396
  * ecx = 0/1 - disable/enable
1246
Returned value:
1397
Returned value:
1247
  * eax = 0
1398
  * eax = 0
1248
Remarks:
1399
Remarks:
1249
  * Is used in LBA-read (subfunction 8 of function 58).
1400
  * Is used in LBA-read (subfunction 8 of function 58).
1250
  * The current implementation uses only low bit of ecx.
1401
  * The current implementation uses only low bit of ecx.
1251
  * To get current status use subfunction 11 of function 26.
1402
  * To get current status use subfunction 11 of function 26.
-
 
1403
 
-
 
1404
---------------------- Constants for registers: ----------------------
-
 
1405
  eax - SF_SYSTEM_SET (21)
1252
 
1406
  ebx - SSF_ACCESS_HD_LBA (11)
1253
======================================================================
1407
======================================================================
1254
 Function 21, subfunction 12 - enable/disable low-level access to PCI.
1408
 Function 21, subfunction 12 - enable/disable low-level access to PCI.
1255
======================================================================
1409
======================================================================
1256
Parameters:
1410
Parameters:
1257
  * eax = 21 - function number
1411
  * eax = 21 - function number
1258
  * ebx = 12 - subfunction number
1412
  * ebx = 12 - subfunction number
1259
  * ecx = 0/1 - disable/enable
1413
  * ecx = 0/1 - disable/enable
1260
Returned value:
1414
Returned value:
1261
  * eax = 0
1415
  * eax = 0
1262
Remarks:
1416
Remarks:
1263
  * Is used in operations with PCI bus (function 62).
1417
  * Is used in operations with PCI bus (function 62).
1264
  * The current implementation uses only low bit of ecx.
1418
  * The current implementation uses only low bit of ecx.
1265
  * To get current status use subfunction 12 of function 26.
1419
  * To get current status use subfunction 12 of function 26.
-
 
1420
 
-
 
1421
---------------------- Constants for registers: ----------------------
-
 
1422
  eax - SF_SYSTEM_SET (21)
1266
 
1423
  ebx - SSF_ACCESS_PCI (12)
1267
======================================================================
1424
======================================================================
1268
================= Function 22 - set system date/time. ================
1425
================= Function 22 - set system date/time. ================
1269
======================================================================
1426
======================================================================
1270
Parameters:
1427
Parameters:
1271
  * eax = 22 - function number
1428
  * eax = 22 - function number
1272
  * ebx = 0 - set time
1429
  * ebx = 0 - set time
1273
    * ecx = 0x00SSMMHH - time in the binary-decimal code (BCD):
1430
    * ecx = 0x00SSMMHH - time in the binary-decimal code (BCD):
1274
    * HH=hour 00..23
1431
    * HH=hour 00..23
1275
    * MM=minute 00..59
1432
    * MM=minute 00..59
1276
    * SS=second 00..59
1433
    * SS=second 00..59
1277
  * ebx = 1 - set date
1434
  * ebx = 1 - set date
1278
    * ecx = 0x00DDMMYY - date in the binary-decimal code (BCD):
1435
    * ecx = 0x00DDMMYY - date in the binary-decimal code (BCD):
1279
    * DD=day 01..31
1436
    * DD=day 01..31
1280
    * MM=month 01..12
1437
    * MM=month 01..12
1281
    * YY=year 00..99
1438
    * YY=year 00..99
1282
  * ebx = 2 - set day of week
1439
  * ebx = 2 - set day of week
1283
    * ecx = 1 for Sunday, ..., 7 for Saturday
1440
    * ecx = 1 for Sunday, ..., 7 for Saturday
1284
  * ebx = 3 - set alarm clock
1441
  * ebx = 3 - set alarm clock
1285
    * ecx = 0x00SSMMHH
1442
    * ecx = 0x00SSMMHH
1286
Returned value:
1443
Returned value:
1287
  * eax = 0 - success
1444
  * eax = 0 - success
1288
  * eax = 1 - incorrect parameter
1445
  * eax = 1 - incorrect parameter
1289
  * eax = 2 - CMOS-battery was unloaded
1446
  * eax = 2 - CMOS-battery was unloaded
1290
Remarks:
1447
Remarks:
1291
  * Value of installation of day of week seems to be doubtful,
1448
  * Value of installation of day of week seems to be doubtful,
1292
    as it a little where is used
1449
    as it a little where is used
1293
    (day of week can be calculated by date).
1450
    (day of week can be calculated by date).
1294
  * Alarm clock can be set on operation in the given time every day.
1451
  * Alarm clock can be set on operation in the given time every day.
1295
    But there is no existing system function to disable it.
1452
    But there is no existing system function to disable it.
1296
  * Operation of alarm clock consists in generation IRQ8.
1453
  * Operation of alarm clock consists in generation IRQ8.
1297
  * Generally CMOS supports for alarm clock set of value 0xFF
1454
  * Generally CMOS supports for alarm clock set of value 0xFF
1298
    as one of parameters and it means that the appropriate parameter
1455
    as one of parameters and it means that the appropriate parameter
1299
    is ignored. But current implementation does not allow this
1456
    is ignored. But current implementation does not allow this
1300
    (will return 1).
1457
    (will return 1).
1301
  * Alarm clock is a global system resource; the set of
1458
  * Alarm clock is a global system resource; the set of
1302
    an alarm clock cancels automatically the previous set.
1459
    an alarm clock cancels automatically the previous set.
1303
    However, at moment no program uses it.
1460
    However, at moment no program uses it.
-
 
1461
 
-
 
1462
---------------------- Constants for registers: ----------------------
1304
 
1463
  eax - SF_SET_TIME_DATE (22)
1305
======================================================================
1464
======================================================================
1306
============= Function 23 - wait for event with timeout. =============
1465
============= Function 23 - wait for event with timeout. =============
1307
======================================================================
1466
======================================================================
1308
If the message queue is empty, waits for new message in the queue,
1467
If the message queue is empty, waits for new message in the queue,
1309
but no more than given time. Then reads out a message from the queue.
1468
but no more than given time. Then reads out a message from the queue.
1310
 
1469
 
1311
Parameters:
1470
Parameters:
1312
  * eax = 23 - function number
1471
  * eax = 23 - function number
1313
  * ebx = timeout (in 1/100 of second)
1472
  * ebx = timeout (in 1/100 of second)
1314
Returned value:
1473
Returned value:
1315
  * eax = 0 - the message queue is empty
1474
  * eax = 0 - the message queue is empty
1316
  * otherwise eax = event (see the list of events)
1475
  * otherwise eax = event (see the list of events)
1317
Remarks:
1476
Remarks:
1318
  * Only those events are taken into account, which enter into
1477
  * Only those events are taken into account, which enter into
1319
    the mask set by function 40. By default it is
1478
    the mask set by function 40. By default it is
1320
    redraw, key and button events.
1479
    redraw, key and button events.
1321
  * To check for presence of a message in the queue use function 11.
1480
  * To check for presence of a message in the queue use function 11.
1322
    To wait without timeout use function 10.
1481
    To wait without timeout use function 10.
1323
  * Transmission ebx=0 results in immediate returning eax=0.
1482
  * Transmission ebx=0 results in immediate returning eax=0.
1324
  * Current implementation returns immediately with eax=0,
1483
  * Current implementation returns immediately with eax=0,
1325
    if the addition of ebx with the current value of time counter
1484
    if the addition of ebx with the current value of time counter
1326
    makes 32-bit overflow.
1485
    makes 32-bit overflow.
-
 
1486
 
-
 
1487
---------------------- Constants for registers: ----------------------
1327
 
1488
  eax - SF_WAIT_EVENT_TIMEOUT (23)
1328
======================================================================
1489
======================================================================
1329
======= Function 24, subfunction 4 - eject tray of disk drive. =======
1490
======= Function 24, subfunction 4 - eject tray of disk drive. =======
1330
======================================================================
1491
======================================================================
1331
Parameters:
1492
Parameters:
1332
  * eax = 24 - function number
1493
  * eax = 24 - function number
1333
  * ebx = 4 - subfunction number
1494
  * ebx = 4 - subfunction number
1334
  * ecx = position of CD/DVD-drive
1495
  * ecx = position of CD/DVD-drive
1335
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1496
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1336
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1497
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1337
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1498
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1338
Returned value:
1499
Returned value:
1339
  * function does not return value
1500
  * function does not return value
1340
Remarks:
1501
Remarks:
1341
  * The function is supported only for ATAPI devices (CD and DVD).
1502
  * The function is supported only for ATAPI devices (CD and DVD).
1342
  * When the tray is being ejected,
1503
  * When the tray is being ejected,
1343
    manual control of tray is unlocked.
1504
    manual control of tray is unlocked.
1344
  * When the tray is being ejected, the code clears the cache for
1505
  * When the tray is being ejected, the code clears the cache for
1345
    corresponding device.
1506
    corresponding device.
1346
  * An example of usage of the function is the application CD_tray.
1507
  * An example of usage of the function is the application CD_tray.
-
 
1508
 
-
 
1509
---------------------- Constants for registers: ----------------------
-
 
1510
  eax - SF_CD (24)
1347
 
1511
  ebx - SSF_EJECT_TRAY (4), SSF_INSERT_TRAY (5)
1348
======================================================================
1512
======================================================================
1349
======== Function 24, subfunction 5 - load tray of disk drive. =======
1513
======== Function 24, subfunction 5 - load tray of disk drive. =======
1350
======================================================================
1514
======================================================================
1351
Parameters:
1515
Parameters:
1352
  * eax = 24 - function number
1516
  * eax = 24 - function number
1353
  * ebx = 5 - subfunction number
1517
  * ebx = 5 - subfunction number
1354
  * ecx = position of CD/DVD-drive
1518
  * ecx = position of CD/DVD-drive
1355
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1519
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1356
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1520
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1357
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1521
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1358
Returned value:
1522
Returned value:
1359
  * function does not return value
1523
  * function does not return value
1360
Remarks:
1524
Remarks:
1361
  * The function is supported only for ATAPI devices (CD and DVD).
1525
  * The function is supported only for ATAPI devices (CD and DVD).
1362
  * An example of usage of the function is the application CD_tray.
1526
  * An example of usage of the function is the application CD_tray.
-
 
1527
 
-
 
1528
---------------------- Constants for registers: ----------------------
-
 
1529
  eax - SF_CD (24)
1363
 
1530
  ebx - SSF_EJECT_TRAY (4), SSF_INSERT_TRAY (5)
1364
======================================================================
1531
======================================================================
1365
======= Function 25 - put image area on the background layer. ========
1532
======= Function 25 - put image area on the background layer. ========
1366
======================================================================
1533
======================================================================
1367
Paramters:
1534
Paramters:
1368
  * eax = 25 - function number
1535
  * eax = 25 - function number
1369
  * ebx = pointer to the previously allocated memory area,
1536
  * ebx = pointer to the previously allocated memory area,
1370
        where placed the source images in a format BBGGRRTTBBGGRRTT...
1537
        where placed the source images in a format BBGGRRTTBBGGRRTT...
1371
  * ecx = [size on axis x]*65536 + [size on axis y]
1538
  * ecx = [size on axis x]*65536 + [size on axis y]
1372
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1539
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1373
Returned value:
1540
Returned value:
1374
  * function does not return value
1541
  * function does not return value
1375
Remarks:
1542
Remarks:
1376
  * Coordinates of the image are coordinates of the upper left corner
1543
  * Coordinates of the image are coordinates of the upper left corner
1377
    of the image relative to the screen.
1544
    of the image relative to the screen.
1378
  * Size of the image in bytes is 4*xsize*ysize
1545
  * Size of the image in bytes is 4*xsize*ysize
1379
  * TT - byte pointer of transparency, at current version:
1546
  * TT - byte pointer of transparency, at current version:
1380
         1 to FF - opaque, 0 - transparent.
1547
         1 to FF - opaque, 0 - transparent.
1381
  * The function places the image directly to LFB. It is not for
1548
  * The function places the image directly to LFB. It is not for
1382
    background image f.15. Options f.15 to f.25 does not make sense.
1549
    background image f.15. Options f.15 to f.25 does not make sense.
-
 
1550
 
-
 
1551
---------------------- Constants for registers: ----------------------
1383
 
1552
  eax - SF_SCREEN_PUT_IMAGE (25)
1384
======================================================================
1553
======================================================================
1385
======== Function 26, subfunction 1 - get MPU MIDI base port. ========
1554
======== Function 26, subfunction 1 - get MPU MIDI base port. ========
1386
======================================================================
1555
======================================================================
1387
Parameters:
1556
Parameters:
1388
  * eax = 26 - function number
1557
  * eax = 26 - function number
1389
  * ebx = 1 - subfunction number
1558
  * ebx = 1 - subfunction number
1390
Returned value:
1559
Returned value:
1391
  * eax = port number
1560
  * eax = port number
1392
Parameters:
1561
Parameters:
1393
  * To set base port use subfunction 1 of function 21.
1562
  * To set base port use subfunction 1 of function 21.
-
 
1563
 
-
 
1564
---------------------- Constants for registers: ----------------------
-
 
1565
  eax - SF_SYSTEM_GET (26)
1394
 
1566
  ebx - SSF_MPU_MIDI_BASE (1)
1395
======================================================================
1567
======================================================================
1396
========== Function 26, subfunction 2 - get keyboard layout. =========
1568
========== Function 26, subfunction 2 - get keyboard layout. =========
1397
======================================================================
1569
======================================================================
1398
The keyboard layout is used to convert keyboard scancodes to
1570
The keyboard layout is used to convert keyboard scancodes to
1399
ASCII-codes for function 2.
1571
ASCII-codes for function 2.
1400
Parameters:
1572
Parameters:
1401
  * eax = 26 - function number
1573
  * eax = 26 - function number
1402
  * ebx = 2 - subfunction number
1574
  * ebx = 2 - subfunction number
1403
  * ecx = what layout to get:
1575
  * ecx = what layout to get:
1404
    * 1 = normal layout
1576
    * 1 = normal layout
1405
    * 2 = layout with pressed Shift
1577
    * 2 = layout with pressed Shift
1406
    * 3 = layout with pressed Alt
1578
    * 3 = layout with pressed Alt
1407
  * edx = pointer to the 128-bytes buffer, where the layout will be
1579
  * edx = pointer to the 128-bytes buffer, where the layout will be
1408
    copied
1580
    copied
1409
Returned value:
1581
Returned value:
1410
  * function does not return value
1582
  * function does not return value
1411
Or:
1583
Or:
1412
  * eax = 26 - function number
1584
  * eax = 26 - function number
1413
  * ebx = 2 - subfunction number
1585
  * ebx = 2 - subfunction number
1414
  * ecx = 9
1586
  * ecx = 9
1415
Returned value:
1587
Returned value:
1416
  * eax = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1588
  * eax = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1417
Remarks:
1589
Remarks:
1418
  * If Alt is pressed, the layout with Alt is used;
1590
  * If Alt is pressed, the layout with Alt is used;
1419
    if Alt is not pressed, but Shift is pressed,
1591
    if Alt is not pressed, but Shift is pressed,
1420
    the layout with Shift is used;
1592
    the layout with Shift is used;
1421
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1593
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1422
    layout is used and then from the code is subtracted 0x60;
1594
    layout is used and then from the code is subtracted 0x60;
1423
    if no control key is pressed, the normal layout is used.
1595
    if no control key is pressed, the normal layout is used.
1424
  * To set layout and country identifier use
1596
  * To set layout and country identifier use
1425
    subfunction 2 of function 21.
1597
    subfunction 2 of function 21.
1426
  * Country identifier is global system variable, which is not used
1598
  * Country identifier is global system variable, which is not used
1427
    by the kernel itself; however the application '@taskbar' displays
1599
    by the kernel itself; however the application '@taskbar' displays
1428
    the corresponding icon (using this function).
1600
    the corresponding icon (using this function).
1429
  * The application @taskbar switches layouts on user request.
1601
  * The application @taskbar switches layouts on user request.
-
 
1602
 
-
 
1603
---------------------- Constants for registers: ----------------------
-
 
1604
  eax - SF_SYSTEM_GET (26)
1430
 
1605
  ebx - SSF_KEYBOARD_LAYOUT (2)
1431
======================================================================
1606
======================================================================
1432
========== Function 26, subfunction 5 - get system language. =========
1607
========== Function 26, subfunction 5 - get system language. =========
1433
======================================================================
1608
======================================================================
1434
Parameters:
1609
Parameters:
1435
  * eax = 26 - function number
1610
  * eax = 26 - function number
1436
  * ebx = 5 - subfunction number
1611
  * ebx = 5 - subfunction number
1437
Returned value:
1612
Returned value:
1438
  * eax = system language (1=eng, 2=fi, 3=ger, 4=rus)
1613
  * eax = system language (1=eng, 2=fi, 3=ger, 4=rus)
1439
Remarks:
1614
Remarks:
1440
  * System language is global system variable and is not used
1615
  * System language is global system variable and is not used
1441
    by the kernel itself, however application @taskbar draws the
1616
    by the kernel itself, however application @taskbar draws the
1442
    appropriate icon (using this function).
1617
    appropriate icon (using this function).
1443
  * To set system language use subfunction 5 of function 21.
1618
  * To set system language use subfunction 5 of function 21.
-
 
1619
 
-
 
1620
---------------------- Constants for registers: ----------------------
-
 
1621
  eax - SF_SYSTEM_GET (26)
1444
 
1622
  ebx - SSF_SYS_LANG (5)
1445
======================================================================
1623
======================================================================
1446
=== Function 26, subfunction 9 - get the value of the time counter. ==
1624
=== Function 26, subfunction 9 - get the value of the time counter. ==
1447
======================================================================
1625
======================================================================
1448
Parameters:
1626
Parameters:
1449
  * eax = 26 - function number
1627
  * eax = 26 - function number
1450
  * ebx = 9 - subfunction number
1628
  * ebx = 9 - subfunction number
1451
Returned value:
1629
Returned value:
1452
  * eax = number of 1/100s of second, past from the system boot time
1630
  * eax = number of 1/100s of second, past from the system boot time
1453
Remarks:
1631
Remarks:
1454
  * Counter takes modulo 2^32, that correspond to a little more
1632
  * Counter takes modulo 2^32, that correspond to a little more
1455
    than 497 days.
1633
    than 497 days.
1456
  * To get system time use function 3.  
1634
  * To get system time use function 3.  
-
 
1635
 
-
 
1636
---------------------- Constants for registers: ----------------------
-
 
1637
  eax - SF_SYSTEM_GET (26)
1457
  
1638
  ebx - SSF_TIME_COUNT (9)
1458
======================================================================
1639
======================================================================
1459
===================== Function 26, subfunction 10 ====================
1640
===================== Function 26, subfunction 10 ====================
1460
========== Get the value of the high precision time counter. =========
1641
========== Get the value of the high precision time counter. =========
1461
======================================================================
1642
======================================================================
1462
Parameters:
1643
Parameters:
1463
  * eax = 26 - function number
1644
  * eax = 26 - function number
1464
  * ebx = 10 - subfunction number
1645
  * ebx = 10 - subfunction number
1465
Returned value:
1646
Returned value:
1466
  * eax = number of nanoseconds since system boot time (lower DWORD)
1647
  * eax = number of nanoseconds since system boot time (lower DWORD)
1467
  * edx = number of nanoseconds since system boot time (high DWORD)  
1648
  * edx = number of nanoseconds since system boot time (high DWORD)  
1468
Remarks:
1649
Remarks:
1469
  * The counter is based on HPET, if HPET is not available, resolution
1650
  * The counter is based on HPET, if HPET is not available, resolution
1470
    will be reduced to 10 000 000 nanoseconds.
1651
    will be reduced to 10 000 000 nanoseconds.
-
 
1652
 
-
 
1653
---------------------- Constants for registers: ----------------------
-
 
1654
  eax - SF_SYSTEM_GET (26)
1471
 
1655
  ebx - SSF_TIME_COUNT_PRO (10)
1472
======================================================================
1656
======================================================================
1473
===================== Function 26, subfunction 11 ====================
1657
===================== Function 26, subfunction 11 ====================
1474
========== Find out whether low-level HD access is enabled. ==========
1658
========== Find out whether low-level HD access is enabled. ==========
1475
======================================================================
1659
======================================================================
1476
Parameters:
1660
Parameters:
1477
  * eax = 26 - function number
1661
  * eax = 26 - function number
1478
  * ebx = 11 - subfunction number
1662
  * ebx = 11 - subfunction number
1479
Returned value:
1663
Returned value:
1480
  * eax = 0/1 - disabled/enabled
1664
  * eax = 0/1 - disabled/enabled
1481
Remarks:
1665
Remarks:
1482
  * Is used in LBA read (subfunction 8 of function 58).
1666
  * Is used in LBA read (subfunction 8 of function 58).
1483
  * To set current state use subfunction 11 of function 21.
1667
  * To set current state use subfunction 11 of function 21.
-
 
1668
 
-
 
1669
---------------------- Constants for registers: ----------------------
-
 
1670
  eax - SF_SYSTEM_GET (26)
1484
 
1671
  ebx - SSF_ACCESS_HD_LBA (11)
1485
======================================================================
1672
======================================================================
1486
===================== Function 26, subfunction 12 ====================
1673
===================== Function 26, subfunction 12 ====================
1487
========== Find out whether low-level PCI access is enabled. =========
1674
========== Find out whether low-level PCI access is enabled. =========
1488
======================================================================
1675
======================================================================
1489
Parameters:
1676
Parameters:
1490
  * eax = 26 - function number
1677
  * eax = 26 - function number
1491
  * ebx = 12 - subfunction number
1678
  * ebx = 12 - subfunction number
1492
Returned value:
1679
Returned value:
1493
  * eax = 0/1 - disabled/enabled
1680
  * eax = 0/1 - disabled/enabled
1494
Remarks:
1681
Remarks:
1495
  * Is used by operations with PCI bus (function 62).
1682
  * Is used by operations with PCI bus (function 62).
1496
  * The current implementation uses only low bit of ecx.
1683
  * The current implementation uses only low bit of ecx.
1497
  * To set the current state use subfunction 12 of function 21.
1684
  * To set the current state use subfunction 12 of function 21.
-
 
1685
 
-
 
1686
---------------------- Constants for registers: ----------------------
-
 
1687
  eax - SF_SYSTEM_GET (26)
1498
 
1688
  ebx - SSF_ACCESS_PCI (12)
1499
======================================================================
1689
======================================================================
1500
=================== Function 29 - get system date. ===================
1690
=================== Function 29 - get system date. ===================
1501
======================================================================
1691
======================================================================
1502
Parameters:
1692
Parameters:
1503
  * eax = 29 - function number
1693
  * eax = 29 - function number
1504
Returned value:
1694
Returned value:
1505
  * eax = 0x00DDMMYY, where
1695
  * eax = 0x00DDMMYY, where
1506
    (binary-decimal coding, BCD, is used)
1696
    (binary-decimal coding, BCD, is used)
1507
  * YY = two low digits of year (00..99)
1697
  * YY = two low digits of year (00..99)
1508
  * MM = month (01..12)
1698
  * MM = month (01..12)
1509
  * DD = day (01..31)
1699
  * DD = day (01..31)
1510
Remarks:
1700
Remarks:
1511
  * To set system date use function 22.
1701
  * To set system date use function 22.
-
 
1702
 
-
 
1703
---------------------- Constants for registers: ----------------------
1512
 
1704
  eax - SF_GET_SYS_DATE (29)
1513
======================================================================
1705
======================================================================
1514
============= Function 30 - work with the current folder. ============
1706
============= Function 30 - work with the current folder. ============
1515
======================================================================
1707
======================================================================
1516
 
1708
 
1517
--------- Subfunction 1 - set current folder for the thread. ---------
1709
--------- Subfunction 1 - set current folder for the thread. ---------
1518
Parameters:
1710
Parameters:
1519
  * eax = 30 - function number
1711
  * eax = 30 - function number
1520
  * ebx = 1 - subfunction number
1712
  * ebx = 1 - subfunction number
1521
  * ecx = pointer to ASCIIZ-string with the path to new current folder
1713
  * ecx = pointer to ASCIIZ-string with the path to new current folder
1522
Returned value:
1714
Returned value:
1523
  * function does not return value
1715
  * function does not return value
1524
 
1716
 
1525
--------- Subfunction 2 - get current folder for the thread. ---------
1717
--------- Subfunction 2 - get current folder for the thread. ---------
1526
Parameters:
1718
Parameters:
1527
  * eax = 30 - function number
1719
  * eax = 30 - function number
1528
  * ebx = 2 - subfunction number
1720
  * ebx = 2 - subfunction number
1529
  * ecx = pointer to buffer
1721
  * ecx = pointer to buffer
1530
  * edx = size of buffer
1722
  * edx = size of buffer
1531
Returned value:
1723
Returned value:
1532
  * eax = size of the current folder's name (including terminating 0)
1724
  * eax = size of the current folder's name (including terminating 0)
1533
Remarks:
1725
Remarks:
1534
  * If the buffer is too small to hold all data, only first (edx-1)
1726
  * If the buffer is too small to hold all data, only first (edx-1)
1535
    bytes are copied and than terminating 0 is inserted.
1727
    bytes are copied and than terminating 0 is inserted.
1536
  * By default, current folder for the thread is "/rd/1".
1728
  * By default, current folder for the thread is "/rd/1".
1537
  * At process/thread creation the current folder will be inherited
1729
  * At process/thread creation the current folder will be inherited
1538
    from the parent.
1730
    from the parent.
1539
 
1731
 
1540
--- Subfunction 3 - install the add.system directory for the kernel --
1732
--- Subfunction 3 - install the add.system directory for the kernel --
1541
Parameters:
1733
Parameters:
1542
  * eax = 30 - function number
1734
  * eax = 30 - function number
1543
  * ebx = 3 - subfunction number
1735
  * ebx = 3 - subfunction number
1544
  * ecx = pointer to a block of data:
1736
  * ecx = pointer to a block of data:
1545
          sysdir_name     rb 64
1737
          sysdir_name     rb 64
1546
          sysdir_path     rb 64
1738
          sysdir_path     rb 64
1547
For example:
1739
For example:
1548
dir_name1       db 'KolibriOS',0
1740
dir_name1       db 'KolibriOS',0
1549
                rb 64-10
1741
                rb 64-10
1550
dir_path1       db 'HD0/1',0
1742
dir_path1       db 'HD0/1',0
1551
                rb 64-6
1743
                rb 64-6
1552
Returned value:
1744
Returned value:
1553
  * function does not return value
1745
  * function does not return value
1554
Remarks:
1746
Remarks:
1555
  * The function can be called only 1 time for 1 session of the OS.
1747
  * The function can be called only 1 time for 1 session of the OS.
-
 
1748
 
-
 
1749
---------------------- Constants for registers: ----------------------
-
 
1750
  eax - SF_CURRENT_FOLDER (30)
1556
 
1751
  ebx - SSF_SET_CF (1), SSF_GET_CF (2), SSF_ADD_SYS_FOLDER (3)
1557
======================================================================
1752
======================================================================
1558
========= Function 34 - who owner the pixel on the screen. ===========
1753
========= Function 34 - who owner the pixel on the screen. ===========
1559
======================================================================
1754
======================================================================
1560
Parameters:
1755
Parameters:
1561
  * eax = 34 - function number
1756
  * eax = 34 - function number
1562
  * ebx = x-coordinate (relative to the display)
1757
  * ebx = x-coordinate (relative to the display)
1563
  * ecx = y-coordinate (relative to the display)
1758
  * ecx = y-coordinate (relative to the display)
1564
 
1759
 
1565
Returned value:
1760
Returned value:
1566
  * eax = 0x000000XX - owner of pixel the slot window N
1761
  * eax = 0x000000XX - owner of pixel the slot window N
1567
    If incorrect values ebx and ecx then function returns 0
1762
    If incorrect values ebx and ecx then function returns 0
1568
  * The function takes the value from the area [_WinMapAddress]
1763
  * The function takes the value from the area [_WinMapAddress]
-
 
1764
 
-
 
1765
---------------------- Constants for registers: ----------------------
1569
 
1766
  eax - SF_GET_PIXEL_OWNER (34)
1570
======================================================================
1767
======================================================================
1571
======= Function 35 - read the color of a pixel on the screen. =======
1768
======= Function 35 - read the color of a pixel on the screen. =======
1572
======================================================================
1769
======================================================================
1573
Parameters:
1770
Parameters:
1574
  * eax = 35
1771
  * eax = 35
1575
  * ebx = y*xsize+x, where
1772
  * ebx = y*xsize+x, where
1576
  * (x,y) = coordinates of a pixel (beginning from 0)
1773
  * (x,y) = coordinates of a pixel (beginning from 0)
1577
  * xsize = horizontal screen size
1774
  * xsize = horizontal screen size
1578
Returned value:
1775
Returned value:
1579
  * eax = color 0x00RRGGBB
1776
  * eax = color 0x00RRGGBB
1580
Remarks:
1777
Remarks:
1581
  * To get screen sizes use function 14. Pay attention,
1778
  * To get screen sizes use function 14. Pay attention,
1582
    that it subtracts 1 from both sizes.
1779
    that it subtracts 1 from both sizes.
1583
  * There is also direct access (without any system calls)
1780
  * There is also direct access (without any system calls)
1584
    to videomemory through the selector gs. To get parameters of
1781
    to videomemory through the selector gs. To get parameters of
1585
    the current videomode, use function 61.
1782
    the current videomode, use function 61.
-
 
1783
 
-
 
1784
---------------------- Constants for registers: ----------------------
1586
 
1785
  eax - SF_GET_PIXEL (35)
1587
======================================================================
1786
======================================================================
1588
=================== Function 36 - read screen area. ==================
1787
=================== Function 36 - read screen area. ==================
1589
======================================================================
1788
======================================================================
1590
Paramters:
1789
Paramters:
1591
  * eax = 36 - function number
1790
  * eax = 36 - function number
1592
  * ebx = pointer to the previously allocated memory area,
1791
  * ebx = pointer to the previously allocated memory area,
1593
        where will be placed the image in the format BBGGRRBBGGRR...
1792
        where will be placed the image in the format BBGGRRBBGGRR...
1594
  * ecx = [size on axis x]*65536 + [size on axis y]
1793
  * ecx = [size on axis x]*65536 + [size on axis y]
1595
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1794
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1596
Returned value:
1795
Returned value:
1597
  * function does not return value
1796
  * function does not return value
1598
Remarks:
1797
Remarks:
1599
  * Coordinates of the image are coordinates of the upper left corner
1798
  * Coordinates of the image are coordinates of the upper left corner
1600
    of the image relative to the screen.
1799
    of the image relative to the screen.
1601
  * Size of the image in bytes is 3*xsize*ysize.
1800
  * Size of the image in bytes is 3*xsize*ysize.
-
 
1801
 
-
 
1802
---------------------- Constants for registers: ----------------------
1602
 
1803
  eax - SF_GET_IMAGE (36)
1603
======================================================================
1804
======================================================================
1604
=================== Function 37 - work with mouse. ===================
1805
=================== Function 37 - work with mouse. ===================
1605
======================================================================
1806
======================================================================
1606
 
1807
 
1607
---------- Subfunction 0 - screen coordinates of the mouse -----------
1808
---------- Subfunction 0 - screen coordinates of the mouse -----------
1608
Parameters:
1809
Parameters:
1609
  * eax = 37 - function number
1810
  * eax = 37 - function number
1610
  * ebx = 0 - subfunction number
1811
  * ebx = 0 - subfunction number
1611
Returned value:
1812
Returned value:
1612
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1813
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1613
    (beginning from 0)
1814
    (beginning from 0)
1614
 
1815
 
1615
-- Subfunction 1 - coordinates of the mouse relative to the window ---
1816
-- Subfunction 1 - coordinates of the mouse relative to the window ---
1616
Parameters:
1817
Parameters:
1617
  * eax = 37 - function number
1818
  * eax = 37 - function number
1618
  * ebx = 1 - subfunction number
1819
  * ebx = 1 - subfunction number
1619
Returned value:
1820
Returned value:
1620
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1821
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1621
    relative to the application window (beginning from 0)
1822
    relative to the application window (beginning from 0)
1622
Remarks:
1823
Remarks:
1623
  * The value is calculated by formula (x-xwnd)*65536 + (y-ywnd).
1824
  * The value is calculated by formula (x-xwnd)*65536 + (y-ywnd).
1624
    If y>=ywnd, the low word is non-negative and contains
1825
    If y>=ywnd, the low word is non-negative and contains
1625
    relative y-coordinate, and the high word - relative x-coordinate
1826
    relative y-coordinate, and the high word - relative x-coordinate
1626
    (with correct sign). Otherwise the low word is negative and still
1827
    (with correct sign). Otherwise the low word is negative and still
1627
    contains relative y-coordinate, and to the high word
1828
    contains relative y-coordinate, and to the high word
1628
    1 should be added.
1829
    1 should be added.
1629
 
1830
 
1630
------------- Subfunction 2 - states of the mouse buttons ------------
1831
------------- Subfunction 2 - states of the mouse buttons ------------
1631
Parameters:
1832
Parameters:
1632
  * eax = 37 - function number
1833
  * eax = 37 - function number
1633
  * ebx = 2 - subfunction number
1834
  * ebx = 2 - subfunction number
1634
Returned value:
1835
Returned value:
1635
  * eax = bits 0-4 equal to subfunction 3
1836
  * eax = bits 0-4 equal to subfunction 3
1636
 
1837
 
1637
------- Subfunction 3 - states and events of the mouse buttons -------
1838
------- Subfunction 3 - states and events of the mouse buttons -------
1638
Parameters:
1839
Parameters:
1639
  * eax = 37 - function number
1840
  * eax = 37 - function number
1640
  * ebx = 3 - subfunction number
1841
  * ebx = 3 - subfunction number
1641
Returned value:
1842
Returned value:
1642
  * eax contains next information:
1843
  * eax contains next information:
1643
 
1844
 
1644
states:
1845
states:
1645
  * bit 0 is set = left button is held
1846
  * bit 0 is set = left button is held
1646
  * bit 1 is set = right button is held
1847
  * bit 1 is set = right button is held
1647
  * bit 2 is set = middle button is held
1848
  * bit 2 is set = middle button is held
1648
  * bit 3 is set = 4th button is held
1849
  * bit 3 is set = 4th button is held
1649
  * bit 4 is set = 5th button is held
1850
  * bit 4 is set = 5th button is held
1650
 
1851
 
1651
events:
1852
events:
1652
  * bit 8 is set = left button is pressed
1853
  * bit 8 is set = left button is pressed
1653
  * bit 9 is set = right button is pressed
1854
  * bit 9 is set = right button is pressed
1654
  * bit 10 is set = middle button is pressed
1855
  * bit 10 is set = middle button is pressed
1655
 
1856
 
1656
  * bit 15 is set = vertical scroll is used
1857
  * bit 15 is set = vertical scroll is used
1657
 
1858
 
1658
  * bit 16 is set = left button is released
1859
  * bit 16 is set = left button is released
1659
  * bit 17 is set = right button is released
1860
  * bit 17 is set = right button is released
1660
  * bit 18 is set = middle button is released
1861
  * bit 18 is set = middle button is released
1661
 
1862
 
1662
  * bit 23 is set = horisontal scroll is used
1863
  * bit 23 is set = horisontal scroll is used
1663
 
1864
 
1664
  * bit 24 is set = doubleclick by left button
1865
  * bit 24 is set = doubleclick by left button
1665
 
1866
 
1666
-------------------- Subfunction 4 - load cursor ---------------------
1867
-------------------- Subfunction 4 - load cursor ---------------------
1667
Parameters:
1868
Parameters:
1668
  * eax = 37 - function number
1869
  * eax = 37 - function number
1669
  * ebx = 4 - subfunction number
1870
  * ebx = 4 - subfunction number
1670
  * dx = data source:
1871
  * dx = data source:
1671
  * dx = LOAD_FROM_FILE = 0 - data in a file
1872
  * dx = LOAD_FROM_FILE = 0 - data in a file
1672
    * ecx = pointer to full path to the cursor file
1873
    * ecx = pointer to full path to the cursor file
1673
    * the file must be in the format .cur, which is standard for
1874
    * the file must be in the format .cur, which is standard for
1674
      MS Windows, at that of the size 32*32 pixels
1875
      MS Windows, at that of the size 32*32 pixels
1675
  * dx = LOAD_FROM_MEM = 1 - data of file are already loaded in memory
1876
  * dx = LOAD_FROM_MEM = 1 - data of file are already loaded in memory
1676
    * ecx = pointer to data of the cursor file
1877
    * ecx = pointer to data of the cursor file
1677
    * the data format is the same as in the previous case
1878
    * the data format is the same as in the previous case
1678
  * dx = LOAD_INDIRECT = 2 - data in memory
1879
  * dx = LOAD_INDIRECT = 2 - data in memory
1679
    * ecx = pointer to cursor image in the format ARGB 32*32 pixels
1880
    * ecx = pointer to cursor image in the format ARGB 32*32 pixels
1680
    * edx = 0xXXYY0002, where
1881
    * edx = 0xXXYY0002, where
1681
      * XX = x-coordinate of cursor hotspot
1882
      * XX = x-coordinate of cursor hotspot
1682
      * YY = y-coordinate
1883
      * YY = y-coordinate
1683
      * 0 <= XX, YY <= 31
1884
      * 0 <= XX, YY <= 31
1684
Returned value:
1885
Returned value:
1685
  * eax = 0 - failed
1886
  * eax = 0 - failed
1686
  * otherwise eax = cursor handle
1887
  * otherwise eax = cursor handle
1687
 
1888
 
1688
--------------------- Subfunction 5 - set cursor ---------------------
1889
--------------------- Subfunction 5 - set cursor ---------------------
1689
Sets new cursor for the window of the current thread.
1890
Sets new cursor for the window of the current thread.
1690
Parameters:
1891
Parameters:
1691
  * eax = 37 - function number
1892
  * eax = 37 - function number
1692
  * ebx = 5 - subfunction number
1893
  * ebx = 5 - subfunction number
1693
  * ecx = cursor handle
1894
  * ecx = cursor handle
1694
Returned value:
1895
Returned value:
1695
  * eax = handle of previous cursor
1896
  * eax = handle of previous cursor
1696
Remarks:
1897
Remarks:
1697
  * If the handle is incorrect, the function restores the default
1898
  * If the handle is incorrect, the function restores the default
1698
    cursor (standard arrow). In particular, ecx=0 restores it.
1899
    cursor (standard arrow). In particular, ecx=0 restores it.
1699
 
1900
 
1700
------------------- Subfunction 6 - delete cursor --------------------
1901
------------------- Subfunction 6 - delete cursor --------------------
1701
Parameters:
1902
Parameters:
1702
  * eax = 37 - function number
1903
  * eax = 37 - function number
1703
  * ebx = 6 - subfunction number
1904
  * ebx = 6 - subfunction number
1704
  * ecx = cursor handle
1905
  * ecx = cursor handle
1705
Returned value:
1906
Returned value:
1706
  * eax destroyed
1907
  * eax destroyed
1707
Remarks:
1908
Remarks:
1708
  * The cursor must be loaded previously by the current thread
1909
  * The cursor must be loaded previously by the current thread
1709
    (with the call to subfunction 4). The function does not delete
1910
    (with the call to subfunction 4). The function does not delete
1710
    system cursors and cursors, loaded by another applications.
1911
    system cursors and cursors, loaded by another applications.
1711
  * If the active cursor (set by subfunction 5) is deleted,
1912
  * If the active cursor (set by subfunction 5) is deleted,
1712
    the system restores the default cursor (standard arrow).
1913
    the system restores the default cursor (standard arrow).
1713
 
1914
 
1714
------------------ Subfunction 7 - get scroll data -------------------
1915
------------------ Subfunction 7 - get scroll data -------------------
1715
Parameters:
1916
Parameters:
1716
  * eax = 37 - function number
1917
  * eax = 37 - function number
1717
  * ebx = 7 - subfunction number
1918
  * ebx = 7 - subfunction number
1718
Returned value:
1919
Returned value:
1719
  * eax = [horizontal offset]*65536 + [vertical offset]
1920
  * eax = [horizontal offset]*65536 + [vertical offset]
1720
Remarks:
1921
Remarks:
1721
  * Scroll data is available for active window only.
1922
  * Scroll data is available for active window only.
1722
  * Values are zeroed after reading.
1923
  * Values are zeroed after reading.
1723
  * Values are signed.
1924
  * Values are signed.
-
 
1925
 
-
 
1926
---------------------- Constants for registers: ----------------------
-
 
1927
  eax - SF_MOUSE_GET (37)
-
 
1928
  ebx - SSF_SCREEN_POSITION (0), SSF_WINDOW_POSITION (1),
-
 
1929
    SSF_BUTTON (2), SSF_BUTTON_EXT (3), SSF_LOAD_CURSOR (4),
1724
 
1930
    SSF_SET_CURSOR (5), SSF_DEL_CURSOR (6), SSF_SCROLL_DATA (7)
1725
======================================================================
1931
======================================================================
1726
====================== Function 38 - draw line. ======================
1932
====================== Function 38 - draw line. ======================
1727
======================================================================
1933
======================================================================
1728
Parameters:
1934
Parameters:
1729
  * eax = 38 - function number
1935
  * eax = 38 - function number
1730
  * ebx = [start coordinate on axis x]*65536 +
1936
  * ebx = [start coordinate on axis x]*65536 +
1731
              [end coordinate on axis x]
1937
              [end coordinate on axis x]
1732
  * ecx = [start coordinate on axis y]*65536 +
1938
  * ecx = [start coordinate on axis y]*65536 +
1733
              [end coordinate on axis y]
1939
              [end coordinate on axis y]
1734
  * edx = 0x00RRGGBB - color
1940
  * edx = 0x00RRGGBB - color
1735
    edx = 0x01xxxxxx - draw inversed line
1941
    edx = 0x01xxxxxx - draw inversed line
1736
          (low 24 bits are ignored)
1942
          (low 24 bits are ignored)
1737
Returned value:
1943
Returned value:
1738
  * function does not return value
1944
  * function does not return value
1739
Remarks:
1945
Remarks:
1740
  * Coordinates are relative to the window.
1946
  * Coordinates are relative to the window.
1741
  * End point is also drawn.
1947
  * End point is also drawn.
-
 
1948
 
-
 
1949
---------------------- Constants for registers: ----------------------
1742
 
1950
  eax - SF_DRAW_LINE (38)
1743
======================================================================
1951
======================================================================
1744
== Function 39, subfunction 1 - get a size of the background image. ==
1952
== Function 39, subfunction 1 - get a size of the background image. ==
1745
======================================================================
1953
======================================================================
1746
Parameters:
1954
Parameters:
1747
  * eax = 39 - function number
1955
  * eax = 39 - function number
1748
  * ebx = 1 - subfunction number
1956
  * ebx = 1 - subfunction number
1749
Returned value:
1957
Returned value:
1750
  * eax = [width]*65536 + [height]
1958
  * eax = [width]*65536 + [height]
1751
Remarks:
1959
Remarks:
1752
  * There is a pair function to set sizes of background image -
1960
  * There is a pair function to set sizes of background image -
1753
    subfunction 1 of function 15. After which it is necessary,
1961
    subfunction 1 of function 15. After which it is necessary,
1754
    of course, anew to define image.
1962
    of course, anew to define image.
-
 
1963
 
-
 
1964
---------------------- Constants for registers: ----------------------
1755
 
1965
  eax - SF_BACKGROUND_GET (39)
1756
======================================================================
1966
======================================================================
1757
== Function 39, subfunction 2 - get pixel from the background image. =
1967
== Function 39, subfunction 2 - get pixel from the background image. =
1758
======================================================================
1968
======================================================================
1759
Parameters:
1969
Parameters:
1760
  * eax = 39 - function number
1970
  * eax = 39 - function number
1761
  * ebx = 2 - subfunction number
1971
  * ebx = 2 - subfunction number
1762
  * ecx = offset
1972
  * ecx = offset
1763
Returned value:
1973
Returned value:
1764
  * eax = 0x00RRGGBB - pixel color, if offset is valid
1974
  * eax = 0x00RRGGBB - pixel color, if offset is valid
1765
    (less than 0x160000-16)
1975
    (less than 0x160000-16)
1766
  * eax = 2 otherwise
1976
  * eax = 2 otherwise
1767
Remarks:
1977
Remarks:
1768
  * Do not rely on returned value for invalid offsets, it may be
1978
  * Do not rely on returned value for invalid offsets, it may be
1769
    changed in future kernel versions.
1979
    changed in future kernel versions.
1770
  * Offset for pixel with coordinates (x,y)
1980
  * Offset for pixel with coordinates (x,y)
1771
    is calculated as (x+y*xsize)*3.
1981
    is calculated as (x+y*xsize)*3.
1772
  * There is a pair function to set pixel on the background image -
1982
  * There is a pair function to set pixel on the background image -
1773
    subfunction 2 of function 15.
1983
    subfunction 2 of function 15.
-
 
1984
 
-
 
1985
---------------------- Constants for registers: ----------------------
1774
 
1986
  eax - SF_BACKGROUND_GET (39)
1775
======================================================================
1987
======================================================================
1776
== Function 39, subfunction 4 - get drawing mode for the background. =
1988
== Function 39, subfunction 4 - get drawing mode for the background. =
1777
======================================================================
1989
======================================================================
1778
Parameters:
1990
Parameters:
1779
  * eax = 39 - function number
1991
  * eax = 39 - function number
1780
  * ebx = 4 - subfunction number
1992
  * ebx = 4 - subfunction number
1781
Returned value:
1993
Returned value:
1782
  * eax = 1 - tile
1994
  * eax = 1 - tile
1783
  * eax = 2 - stretch
1995
  * eax = 2 - stretch
1784
Remarks:
1996
Remarks:
1785
  * There is a pair function to set drawing mode -
1997
  * There is a pair function to set drawing mode -
1786
    subfunction 4 of function 15.
1998
    subfunction 4 of function 15.
-
 
1999
 
-
 
2000
---------------------- Constants for registers: ----------------------
1787
 
2001
  eax - SF_BACKGROUND_GET (39)
1788
======================================================================
2002
======================================================================
1789
=========== Function 40 - set the mask for expected events. ==========
2003
=========== Function 40 - set the mask for expected events. ==========
1790
======================================================================
2004
======================================================================
1791
The mask for expected events affects function working with events
2005
The mask for expected events affects function working with events
1792
10, 11, 23 - they notify only about events allowed by this mask.
2006
10, 11, 23 - they notify only about events allowed by this mask.
1793
Parameters:
2007
Parameters:
1794
  * eax = 40 - function number
2008
  * eax = 40 - function number
1795
  * ebx = mask: bit i corresponds to event i+1 (see list of events)
2009
  * ebx = mask: bit i corresponds to event i+1 (see list of events)
1796
    (set bit permits notice on event)
2010
    (set bit permits notice on event)
1797
    bit 31: mouse active/inactive filter
2011
    bit 31: mouse active/inactive filter
1798
    bit 31 = 0 - inactive window receive mouse events
2012
    bit 31 = 0 - inactive window receive mouse events
1799
    bit 31 = 1 - inactive window does not receive mouse events
2013
    bit 31 = 1 - inactive window does not receive mouse events
1800
    bit 30: cursor position filter
2014
    bit 30: cursor position filter
1801
    bit 30 = 0 = the window receive mouse events if cursor
2015
    bit 30 = 0 = the window receive mouse events if cursor
1802
                 outside window
2016
                 outside window
1803
    bit 30 = 1 - the window does not receive mouse events if cursor
2017
    bit 30 = 1 - the window does not receive mouse events if cursor
1804
                 outside window
2018
                 outside window
1805
Returned value:
2019
Returned value:
1806
  * eax = previous value of mask
2020
  * eax = previous value of mask
1807
Remarks:
2021
Remarks:
1808
  * Default mask (7=111b) enables nofices about redraw,
2022
  * Default mask (7=111b) enables nofices about redraw,
1809
    keys and buttons. This is enough for many applications.
2023
    keys and buttons. This is enough for many applications.
1810
  * Events prohibited in the mask are saved anyway, when come;
2024
  * Events prohibited in the mask are saved anyway, when come;
1811
    they are simply not informed with event functions.
2025
    they are simply not informed with event functions.
1812
  * Event functions take into account the mask on moment of
2026
  * Event functions take into account the mask on moment of
1813
    function call, not on moment of event arrival.
2027
    function call, not on moment of event arrival.
1814
 
-
 
-
 
2028
 
-
 
2029
---------------------- Constants for registers: ----------------------
1815
 
2030
  eax - SF_SET_EVENTS_MASK (40)
1816
======================================================================
2031
======================================================================
1817
================ Function 43 - input/output to a port. ===============
2032
================ Function 43 - input/output to a port. ===============
1818
======================================================================
2033
======================================================================
1819
 
2034
 
1820
------------------------ Output data to port -------------------------
2035
------------------------ Output data to port -------------------------
1821
Parameters:
2036
Parameters:
1822
  * eax = 43 - function number
2037
  * eax = 43 - function number
1823
  * bl = byte for output
2038
  * bl = byte for output
1824
  * ecx = port number 0xnnnn (from 0 to 0xFFFF)
2039
  * ecx = port number 0xnnnn (from 0 to 0xFFFF)
1825
Returned value:
2040
Returned value:
1826
  * eax = 0 - success
2041
  * eax = 0 - success
1827
  * eax = 1 - the thread has not reserved the selected port
2042
  * eax = 1 - the thread has not reserved the selected port
1828
 
2043
 
1829
------------------------ Input data from port ------------------------
2044
------------------------ Input data from port ------------------------
1830
Parameters:
2045
Parameters:
1831
  * eax = 43 - function number
2046
  * eax = 43 - function number
1832
  * ebx is ignored
2047
  * ebx is ignored
1833
  * ecx = 0x8000nnnn, where nnnn = port number (from 0 to 0xFFFF)
2048
  * ecx = 0x8000nnnn, where nnnn = port number (from 0 to 0xFFFF)
1834
Returned value:
2049
Returned value:
1835
  * eax = 0 - success, thus ebx = entered byte
2050
  * eax = 0 - success, thus ebx = entered byte
1836
  * eax = 1 - the thread has not reserved the selected port
2051
  * eax = 1 - the thread has not reserved the selected port
1837
Remarks:
2052
Remarks:
1838
  * Previously the thread must reserve the selected port
2053
  * Previously the thread must reserve the selected port
1839
    for itself by function 46.
2054
    for itself by function 46.
1840
  * Instead of call to this function it is better to use
2055
  * Instead of call to this function it is better to use
1841
    processor instructions in/out - this is much
2056
    processor instructions in/out - this is much
1842
    faster and a bit shorter and easier.
2057
    faster and a bit shorter and easier.
1843
 
-
 
-
 
2058
 
-
 
2059
---------------------- Constants for registers: ----------------------
1844
 
2060
  eax - SF_PORT_IN_OUT (43)
1845
======================================================================
2061
======================================================================
1846
====== Function 46 - reserve/free a group of input/output ports. =====
2062
====== Function 46 - reserve/free a group of input/output ports. =====
1847
======================================================================
2063
======================================================================
1848
To work with reserved ports an application can access directly by
2064
To work with reserved ports an application can access directly by
1849
commands in/out (recommended way) and can use function 43
2065
commands in/out (recommended way) and can use function 43
1850
(not recommended way).
2066
(not recommended way).
1851
Parameters:
2067
Parameters:
1852
  * eax = 46 - function number
2068
  * eax = 46 - function number
1853
  * ebx = 0 - reserve, 1 - free
2069
  * ebx = 0 - reserve, 1 - free
1854
  * ecx = start port number
2070
  * ecx = start port number
1855
  * edx = end port number (inclusive)
2071
  * edx = end port number (inclusive)
1856
Returned value:
2072
Returned value:
1857
  * eax = 0 - success
2073
  * eax = 0 - success
1858
  * eax = 1 - error
2074
  * eax = 1 - error
1859
Remarks:
2075
Remarks:
1860
  * For ports reservation: an error occurs if and only if
2076
  * For ports reservation: an error occurs if and only if
1861
    one from the following condition satisfies:
2077
    one from the following condition satisfies:
1862
    * start port is more than end port;
2078
    * start port is more than end port;
1863
    * the selected range contains incorrect port number
2079
    * the selected range contains incorrect port number
1864
      (correct are from 0 to 0xFFFF);
2080
      (correct are from 0 to 0xFFFF);
1865
    * limit for the total number of reserved areas is exceeded
2081
    * limit for the total number of reserved areas is exceeded
1866
      (maximum 255 are allowed);
2082
      (maximum 255 are allowed);
1867
    * the selected range intersects with any of earlier reserved
2083
    * the selected range intersects with any of earlier reserved
1868
  * For ports free: an error is an attempt to free range,
2084
  * For ports free: an error is an attempt to free range,
1869
    that was not earlier reserved by this function
2085
    that was not earlier reserved by this function
1870
    (with same ecx,edx).
2086
    (with same ecx,edx).
1871
  * If an error occurs (for both cases) function performs no action.
2087
  * If an error occurs (for both cases) function performs no action.
1872
  * At booting the system reserves for itself ports
2088
  * At booting the system reserves for itself ports
1873
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (inclusively).
2089
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (inclusively).
1874
  * When a thread terminates, all reserved by it ports
2090
  * When a thread terminates, all reserved by it ports
1875
    are freed automatically.
2091
    are freed automatically.
-
 
2092
 
-
 
2093
---------------------- Constants for registers: ----------------------
1876
 
2094
  eax - SF_SET_PORTS (46)
1877
======================================================================
2095
======================================================================
1878
============= Function 47 - draw a number in the window. =============
2096
============= Function 47 - draw a number in the window. =============
1879
======================================================================
2097
======================================================================
1880
Parameters:
2098
Parameters:
1881
  * eax = 47 - function number
2099
  * eax = 47 - function number
1882
  * ebx = parameters of conversion number to text:
2100
  * ebx = parameters of conversion number to text:
1883
    * bl = 0 - ecx contains number
2101
    * bl = 0 - ecx contains number
1884
    * bl = 1 - ecx contains pointer to dword/qword-number
2102
    * bl = 1 - ecx contains pointer to dword/qword-number
1885
    * bh = 0 - display in decimal number system
2103
    * bh = 0 - display in decimal number system
1886
    * bh = 1 - display in hexadecimal system
2104
    * bh = 1 - display in hexadecimal system
1887
    * bh = 2 - display in binary system
2105
    * bh = 2 - display in binary system
1888
    * bits 16-21 = how many digits to display
2106
    * bits 16-21 = how many digits to display
1889
    * bits 22-29 reserved and must be set to 0
2107
    * bits 22-29 reserved and must be set to 0
1890
    * bit 30 set = display qword (64-bit) number (must be bl=1)
2108
    * bit 30 set = display qword (64-bit) number (must be bl=1)
1891
    * bit 31 set = do not display leading zeroes of the number
2109
    * bit 31 set = do not display leading zeroes of the number
1892
  * ecx = number (if bl=0) or pointer (if bl=1)
2110
  * ecx = number (if bl=0) or pointer (if bl=1)
1893
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2111
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1894
  * esi = 0xX0RRGGBB:
2112
  * esi = 0xX0RRGGBB:
1895
    * RR, GG, BB specify the color
2113
    * RR, GG, BB specify the color
1896
    * X = ABnn (bits)
2114
    * X = ABnn (bits)
1897
    * nn = font (0/1)
2115
    * nn = font (0/1)
1898
    * A is ignored
2116
    * A is ignored
1899
    * B=1 - fill background with the color edi
2117
    * B=1 - fill background with the color edi
1900
Returned value:
2118
Returned value:
1901
  * function does not return value
2119
  * function does not return value
1902
Remarks:
2120
Remarks:
1903
  * The given length must not exceed 60.
2121
  * The given length must not exceed 60.
1904
  * The exactly given amount of digits is output. If number is small
2122
  * The exactly given amount of digits is output. If number is small
1905
    and can be written by smaller amount of digits, it is supplemented
2123
    and can be written by smaller amount of digits, it is supplemented
1906
    by leading zeroes; if the number is big and can not be written by
2124
    by leading zeroes; if the number is big and can not be written by
1907
    given amount of digits, extra digits are not drawn.
2125
    given amount of digits, extra digits are not drawn.
1908
  * Parameters of fonts are shown in the description of function 4
2126
  * Parameters of fonts are shown in the description of function 4
1909
    (text output).
2127
    (text output).
-
 
2128
 
-
 
2129
---------------------- Constants for registers: ----------------------
1910
 
2130
  eax - SF_DRAW_NUMBER (47)
1911
======================================================================
2131
======================================================================
1912
========= Function 48, subfunction 0 - apply screen settings. ========
2132
========= Function 48, subfunction 0 - apply screen settings. ========
1913
======================================================================
2133
======================================================================
1914
Parameters:
2134
Parameters:
1915
  * eax = 48 - function number
2135
  * eax = 48 - function number
1916
  * ebx = 0 - subfunction number
2136
  * ebx = 0 - subfunction number
1917
  * ecx = 0 - reserved
2137
  * ecx = 0 - reserved
1918
Returned value:
2138
Returned value:
1919
  * function does not return value
2139
  * function does not return value
1920
Remarks:
2140
Remarks:
1921
  * Function redraws the screen after parameters change by
2141
  * Function redraws the screen after parameters change by
1922
    subfunctions 1 and 2.
2142
    subfunctions 1 and 2.
1923
  * Function call without prior call to one of indicated subfunctions
2143
  * Function call without prior call to one of indicated subfunctions
1924
    is ignored.
2144
    is ignored.
1925
  * Function call with nonzero ecx is ignored.
2145
  * Function call with nonzero ecx is ignored.
-
 
2146
 
-
 
2147
---------------------- Constants for registers: ----------------------
-
 
2148
  eax - SF_STYLE_SETTINGS (48)
1926
 
2149
  ebx - SSF_APPLY (0)
1927
======================================================================
2150
======================================================================
1928
=========== Function 48, subfunction 1 - set button style. ===========
2151
=========== Function 48, subfunction 1 - set button style. ===========
1929
======================================================================
2152
======================================================================
1930
Parameters:
2153
Parameters:
1931
  * eax = 48 - function number
2154
  * eax = 48 - function number
1932
  * ebx = 1 - subfunction number
2155
  * ebx = 1 - subfunction number
1933
  * ecx = button style:
2156
  * ecx = button style:
1934
    * 0 = flat
2157
    * 0 = flat
1935
    * 1 = 3d
2158
    * 1 = 3d
1936
Returned value:
2159
Returned value:
1937
  * function does not return value
2160
  * function does not return value
1938
Remarks:
2161
Remarks:
1939
  * After call to this function one should redraw the screen by
2162
  * After call to this function one should redraw the screen by
1940
    subfunction 0.
2163
    subfunction 0.
1941
  * Button style influences only to their draw of function 8.
2164
  * Button style influences only to their draw of function 8.
-
 
2165
 
-
 
2166
---------------------- Constants for registers: ----------------------
-
 
2167
  eax - SF_STYLE_SETTINGS (48)
1942
 
2168
  ebx - SSF_SET_BUTTON_STYLE (1)
1943
======================================================================
2169
======================================================================
1944
====== Function 48, subfunction 2 - set standard window colors. ======
2170
====== Function 48, subfunction 2 - set standard window colors. ======
1945
======================================================================
2171
======================================================================
1946
Parameters:
2172
Parameters:
1947
  * eax = 48 - function number
2173
  * eax = 48 - function number
1948
  * ebx = 2 - subfunction number
2174
  * ebx = 2 - subfunction number
1949
  * ecx = pointer to the color table
2175
  * ecx = pointer to the color table
1950
  * edx = size of the color table
2176
  * edx = size of the color table
1951
    (must be 40 bytes for future compatibility)
2177
    (must be 40 bytes for future compatibility)
1952
Format of the color table is shown in description of subfunction 3.
2178
Format of the color table is shown in description of subfunction 3.
1953
Returned value:
2179
Returned value:
1954
  * function does not return value
2180
  * function does not return value
1955
Remarks:
2181
Remarks:
1956
  * After call to this function one should redraw the screen by
2182
  * After call to this function one should redraw the screen by
1957
    subfunction 0.
2183
    subfunction 0.
1958
  * Table of standard colors influences only to applications,
2184
  * Table of standard colors influences only to applications,
1959
    which receive this table obviously (by subfunction 3)
2185
    which receive this table obviously (by subfunction 3)
1960
    and use it (specifying colors from it to drawing functions).
2186
    and use it (specifying colors from it to drawing functions).
1961
  * Table of standard colors is included in skin and is installed
2187
  * Table of standard colors is included in skin and is installed
1962
    anew with skin installation (by subfunction 8).
2188
    anew with skin installation (by subfunction 8).
1963
  * Color table can be viewed/changed interactively with
2189
  * Color table can be viewed/changed interactively with
1964
    the application 'desktop'.
2190
    the application 'desktop'.
-
 
2191
 
-
 
2192
---------------------- Constants for registers: ----------------------
-
 
2193
  eax - SF_STYLE_SETTINGS (48)
1965
 
2194
  ebx - SSF_SET_COLORS (2)
1966
======================================================================
2195
======================================================================
1967
====== Function 48, subfunction 3 - get standard window colors. ======
2196
====== Function 48, subfunction 3 - get standard window colors. ======
1968
======================================================================
2197
======================================================================
1969
Parameters:
2198
Parameters:
1970
  * eax = 48 - function number
2199
  * eax = 48 - function number
1971
  * ebx = 3 - subfunction number
2200
  * ebx = 3 - subfunction number
1972
  * ecx = pointer to the buffer with size edx bytes,
2201
  * ecx = pointer to the buffer with size edx bytes,
1973
    where table will be written
2202
    where table will be written
1974
  * edx = size of color table
2203
  * edx = size of color table
1975
    (must be 40 bytes for future compatibility)
2204
    (must be 40 bytes for future compatibility)
1976
Returned value:
2205
Returned value:
1977
  * function does not return value
2206
  * function does not return value
1978
Format of the color table:
2207
Format of the color table:
1979
each item is dword-value for color 0x00RRGGBB
2208
each item is dword-value for color 0x00RRGGBB
1980
  * +0: dword: frames - color of frame
2209
  * +0: dword: frames - color of frame
1981
  * +4: dword: grab - color of header
2210
  * +4: dword: grab - color of header
1982
  * +8: dword: grab_button - color of button on header bar
2211
  * +8: dword: grab_button - color of button on header bar
1983
  * +12 = +0xC: dword: grab_button_text - color of text on button
2212
  * +12 = +0xC: dword: grab_button_text - color of text on button
1984
    on header bar
2213
    on header bar
1985
  * +16 = +0x10: dword: grab_text - color of text on header
2214
  * +16 = +0x10: dword: grab_text - color of text on header
1986
  * +20 = +0x14: dword: work - color of working area
2215
  * +20 = +0x14: dword: work - color of working area
1987
  * +24 = +0x18: dword: work_button - color of button in working area
2216
  * +24 = +0x18: dword: work_button - color of button in working area
1988
  * +28 = +0x1C: dword: work_button_text - color of text on button
2217
  * +28 = +0x1C: dword: work_button_text - color of text on button
1989
    in working area
2218
    in working area
1990
  * +32 = +0x20: dword: work_text - color of text in working area
2219
  * +32 = +0x20: dword: work_text - color of text in working area
1991
  * +36 = +0x24: dword: work_graph - color of graphics in working area
2220
  * +36 = +0x24: dword: work_graph - color of graphics in working area
1992
Remarks:
2221
Remarks:
1993
  * Structure of the color table is described in the standard
2222
  * Structure of the color table is described in the standard
1994
    include file 'macros.inc' as 'system_colors'; for example,
2223
    include file 'macros.inc' as 'system_colors'; for example,
1995
    it is possible to write:
2224
    it is possible to write:
1996
        sc      system_colors           ; variable declaration
2225
        sc      system_colors           ; variable declaration
1997
        ...                             ; somewhere one must call
2226
        ...                             ; somewhere one must call
1998
                                        ; this function with ecx=sc
2227
                                        ; this function with ecx=sc
1999
        mov     ecx, [sc.work_button_text]      ; read text color on
2228
        mov     ecx, [sc.work_button_text]      ; read text color on
2000
                                        ; buttin in working area
2229
                                        ; buttin in working area
2001
  * A program itself desides to use or not to use color table.
2230
  * A program itself desides to use or not to use color table.
2002
    For usage program must simply at calls to drawing functions select
2231
    For usage program must simply at calls to drawing functions select
2003
    color taken from the table.
2232
    color taken from the table.
2004
  * At change of the table of standard colors (by subfunction 2 with
2233
  * At change of the table of standard colors (by subfunction 2 with
2005
    the subsequent application of changes by subfunction 0 or
2234
    the subsequent application of changes by subfunction 0 or
2006
    at skin set by subfunction 8) the system sends to all windows
2235
    at skin set by subfunction 8) the system sends to all windows
2007
    redraw message (the event with code 1).
2236
    redraw message (the event with code 1).
2008
  * Color table can be viewed/changed interactively with
2237
  * Color table can be viewed/changed interactively with
2009
    the application 'desktop'.
2238
    the application 'desktop'.
-
 
2239
 
-
 
2240
---------------------- Constants for registers: ----------------------
-
 
2241
  eax - SF_STYLE_SETTINGS (48)
2010
 
2242
  ebx - SSF_GET_COLORS (3)
2011
======================================================================
2243
======================================================================
2012
============ Function 48, subfunction 4 - get skin height. ===========
2244
============ Function 48, subfunction 4 - get skin height. ===========
2013
======================================================================
2245
======================================================================
2014
Parameters:
2246
Parameters:
2015
  * eax = 48 - function number
2247
  * eax = 48 - function number
2016
  * ebx = 4 - subfunction number
2248
  * ebx = 4 - subfunction number
2017
Returned value:
2249
Returned value:
2018
  * eax = skin height
2250
  * eax = skin height
2019
Remarks:
2251
Remarks:
2020
  * Skin height is defined as the height of a header
2252
  * Skin height is defined as the height of a header
2021
    of skinned windows.
2253
    of skinned windows.
2022
  * See also general structure of window in the description
2254
  * See also general structure of window in the description
2023
    of function 0.
2255
    of function 0.
-
 
2256
 
-
 
2257
---------------------- Constants for registers: ----------------------
-
 
2258
  eax - SF_STYLE_SETTINGS (48)
2024
 
2259
  ebx - SSF_GET_SKIN_HEIGHT (4)
2025
======================================================================
2260
======================================================================
2026
======== Function 48, subfunction 5 - get screen working area. =======
2261
======== Function 48, subfunction 5 - get screen working area. =======
2027
======================================================================
2262
======================================================================
2028
Parameters:
2263
Parameters:
2029
  * eax = 48 - function number
2264
  * eax = 48 - function number
2030
  * ebx = 5 - subfunction number
2265
  * ebx = 5 - subfunction number
2031
Returned value:
2266
Returned value:
2032
  * eax = [left]*65536 + [right]
2267
  * eax = [left]*65536 + [right]
2033
  * ebx = [top]*65536 + [bottom]
2268
  * ebx = [top]*65536 + [bottom]
2034
Remarks:
2269
Remarks:
2035
  * The screen working area defines position and coordinates of
2270
  * The screen working area defines position and coordinates of
2036
    a maximized window.
2271
    a maximized window.
2037
  * The screen working area in view of normal work is all screen
2272
  * The screen working area in view of normal work is all screen
2038
    without taskbar ('@taskbar' application).
2273
    without taskbar ('@taskbar' application).
2039
  * (left,top) are coordinates of the left upper corner,
2274
  * (left,top) are coordinates of the left upper corner,
2040
    (right,bottom) are coordinates of the right lower one.
2275
    (right,bottom) are coordinates of the right lower one.
2041
    Thus the size of working area on x axis can be calculated by
2276
    Thus the size of working area on x axis can be calculated by
2042
    formula right-left+1, on y axis - by formula bottom-right+1.
2277
    formula right-left+1, on y axis - by formula bottom-right+1.
2043
  * See also function 14,
2278
  * See also function 14,
2044
    to get sizes of all screen.
2279
    to get sizes of all screen.
2045
  * There is a pair function to set working area - subfunction 6.
2280
  * There is a pair function to set working area - subfunction 6.
-
 
2281
 
-
 
2282
---------------------- Constants for registers: ----------------------
-
 
2283
  eax - SF_STYLE_SETTINGS (48)
2046
 
2284
  ebx - SSF_GET_SCREEN_AREA (5)
2047
======================================================================
2285
======================================================================
2048
======== Function 48, subfunction 6 - set screen working area. =======
2286
======== Function 48, subfunction 6 - set screen working area. =======
2049
======================================================================
2287
======================================================================
2050
Parameters:
2288
Parameters:
2051
  * eax = 48 - function number
2289
  * eax = 48 - function number
2052
  * ebx = 6 - subfunction number
2290
  * ebx = 6 - subfunction number
2053
  * ecx = [left]*65536 + [right]
2291
  * ecx = [left]*65536 + [right]
2054
  * edx = [top]*65536 + [bottom]
2292
  * edx = [top]*65536 + [bottom]
2055
Returned value:
2293
Returned value:
2056
  * function does not return value
2294
  * function does not return value
2057
Remarks:
2295
Remarks:
2058
  * The screen working area defines position and coordinates of
2296
  * The screen working area defines position and coordinates of
2059
    a maximized window.
2297
    a maximized window.
2060
  * This function is used only by the application '@taskbar',
2298
  * This function is used only by the application '@taskbar',
2061
    which set working area to all screen without taskbar.
2299
    which set working area to all screen without taskbar.
2062
  * (left,top) are coordinates of the left upper corner,
2300
  * (left,top) are coordinates of the left upper corner,
2063
    (right,bottom) are coordinates of the right lower one.
2301
    (right,bottom) are coordinates of the right lower one.
2064
    Thus the size of working area on x axis can be calculated by
2302
    Thus the size of working area on x axis can be calculated by
2065
    formula right-left+1, on y axis - by formula bottom-right+1.
2303
    formula right-left+1, on y axis - by formula bottom-right+1.
2066
  * If 'left'>='right', x-coordinate of working area is not changed.
2304
  * If 'left'>='right', x-coordinate of working area is not changed.
2067
    If 'left'<0, 'left' will not be set. If 'right' is greater than or
2305
    If 'left'<0, 'left' will not be set. If 'right' is greater than or
2068
    equal to screen width, 'right' will not be set.
2306
    equal to screen width, 'right' will not be set.
2069
    Similarly on y axis.
2307
    Similarly on y axis.
2070
  * See also function 14,
2308
  * See also function 14,
2071
    to get sizes of all screen.
2309
    to get sizes of all screen.
2072
  * There is a pair function to get working area - subfunction 5.
2310
  * There is a pair function to get working area - subfunction 5.
2073
  * This function redraws the screen automatically,
2311
  * This function redraws the screen automatically,
2074
    updating coordinates and sizes of maximized windows.
2312
    updating coordinates and sizes of maximized windows.
2075
    The system sends to all windows redraw message (the event 1).
2313
    The system sends to all windows redraw message (the event 1).
-
 
2314
 
-
 
2315
---------------------- Constants for registers: ----------------------
-
 
2316
  eax - SF_STYLE_SETTINGS (48)
2076
 
2317
  ebx - SSF_SET_SCREEN_AREA (6)
2077
======================================================================
2318
======================================================================
2078
=========== Function 48, subfunction 7 - get skin margins. ===========
2319
=========== Function 48, subfunction 7 - get skin margins. ===========
2079
======================================================================
2320
======================================================================
2080
Returns the area of a header of a skinned window, intended for
2321
Returns the area of a header of a skinned window, intended for
2081
a text of a header.
2322
a text of a header.
2082
Parameters:
2323
Parameters:
2083
  * eax = 48 - function number
2324
  * eax = 48 - function number
2084
  * ebx = 7 - subfunction number
2325
  * ebx = 7 - subfunction number
2085
Returned value:
2326
Returned value:
2086
  * eax = [left]*65536 + [right]
2327
  * eax = [left]*65536 + [right]
2087
  * ebx = [top]*65536 + [bottom]
2328
  * ebx = [top]*65536 + [bottom]
2088
Remarks:
2329
Remarks:
2089
  * An application decides itself to use or not to use this function.
2330
  * An application decides itself to use or not to use this function.
2090
  * It is recommended to take into account returned value
2331
  * It is recommended to take into account returned value
2091
    of this function for choice of a place for drawing header text
2332
    of this function for choice of a place for drawing header text
2092
    (by function 4) or a substitute of header text
2333
    (by function 4) or a substitute of header text
2093
    (at the discretion of an application).
2334
    (at the discretion of an application).
-
 
2335
 
-
 
2336
---------------------- Constants for registers: ----------------------
-
 
2337
  eax - SF_STYLE_SETTINGS (48)
2094
 
2338
  ebx - SSF_GET_SKIN_MARGINS (7)
2095
======================================================================
2339
======================================================================
2096
============= Function 48, subfunction 8 - set used skin. ============
2340
============= Function 48, subfunction 8 - set used skin. ============
2097
======================================================================
2341
======================================================================
2098
Parameters:
2342
Parameters:
2099
  * eax = 48 - function number
2343
  * eax = 48 - function number
2100
  * ebx = 8 - subfunction number
2344
  * ebx = 8 - subfunction number
2101
  * ecx = pointer to filename of the skin
2345
  * ecx = pointer to filename of the skin
2102
Returned value:
2346
Returned value:
2103
  * eax = 0 - success
2347
  * eax = 0 - success
2104
  * otherwise eax = file system error code; if file does not
2348
  * otherwise eax = file system error code; if file does not
2105
    contain valid skin, function returns error 3
2349
    contain valid skin, function returns error 3
2106
    (unknown file system).
2350
    (unknown file system).
2107
Remarks:
2351
Remarks:
2108
  * After successful skin loading the system sends to all windows
2352
  * After successful skin loading the system sends to all windows
2109
    redraw message (the event 1).
2353
    redraw message (the event 1).
2110
  * At booting the system reads skin from file 'default.skn'
2354
  * At booting the system reads skin from file 'default.skn'
2111
    on ramdisk.
2355
    on ramdisk.
2112
  * User can change the skin statically by creating hisself
2356
  * User can change the skin statically by creating hisself
2113
    'default.skn' or dynamically with the application 'desktop'.
2357
    'default.skn' or dynamically with the application 'desktop'.
-
 
2358
 
-
 
2359
---------------------- Constants for registers: ----------------------
-
 
2360
  eax - SF_STYLE_SETTINGS (48)
2114
 
2361
  ebx - SSF_SET_SKIN (8)
2115
======================================================================
2362
======================================================================
2116
====== Function 48, subfunction 9 - get font smoothing setting. ======
2363
====== Function 48, subfunction 9 - get font smoothing setting. ======
2117
======================================================================
2364
======================================================================
2118
Parameters:
2365
Parameters:
2119
  * eax = 48 - function number
2366
  * eax = 48 - function number
2120
  * ebx = 9 - subfunction number
2367
  * ebx = 9 - subfunction number
2121
Returned value:
2368
Returned value:
2122
  * eax = 2 - subpixel, 1 - anti-aliasing, 0 - off
2369
  * eax = 2 - subpixel, 1 - anti-aliasing, 0 - off
-
 
2370
 
-
 
2371
---------------------- Constants for registers: ----------------------
-
 
2372
  eax - SF_STYLE_SETTINGS (48)
2123
 
2373
  ebx - SSF_GET_FONT_SMOOTH (9)
2124
======================================================================
2374
======================================================================
2125
========== Function 48, subfunction 10 - set font smoothing. =========
2375
========== Function 48, subfunction 10 - set font smoothing. =========
2126
======================================================================
2376
======================================================================
2127
Parameters:
2377
Parameters:
2128
  * eax = 48 - function number
2378
  * eax = 48 - function number
2129
  * ebx = 10 - subfunction number
2379
  * ebx = 10 - subfunction number
2130
  * cl  = 2 - subpixel, 1 - anti-aliasing, 0 - off
2380
  * cl  = 2 - subpixel, 1 - anti-aliasing, 0 - off
-
 
2381
 
-
 
2382
---------------------- Constants for registers: ----------------------
-
 
2383
  eax - SF_STYLE_SETTINGS (48)
2131
 
2384
  ebx - SSF_SET_FONT_SMOOTH (10)
2132
======================================================================
2385
======================================================================
2133
============ Function 48, subfunction 11 - get font size. ============
2386
============ Function 48, subfunction 11 - get font size. ============
2134
======================================================================
2387
======================================================================
2135
Parameters:
2388
Parameters:
2136
  * eax = 48 - function number
2389
  * eax = 48 - function number
2137
  * ebx = 9 - subfunction number
2390
  * ebx = 9 - subfunction number
2138
Returned value:
2391
Returned value:
2139
  * eax = current font height in pixels
2392
  * eax = current font height in pixels
-
 
2393
 
-
 
2394
---------------------- Constants for registers: ----------------------
-
 
2395
  eax - SF_STYLE_SETTINGS (48)
2140
 
2396
  ebx - SSF_GET_FONT_SIZE (11)
2141
======================================================================
2397
======================================================================
2142
============ Function 48, subfunction 12 - set font size. ============
2398
============ Function 48, subfunction 12 - set font size. ============
2143
======================================================================
2399
======================================================================
2144
Parameters:
2400
Parameters:
2145
  * eax = 48 - function number
2401
  * eax = 48 - function number
2146
  * ebx = 10 - subfunction number
2402
  * ebx = 10 - subfunction number
2147
  * cl  = new font height in pixels
2403
  * cl  = new font height in pixels
-
 
2404
 
-
 
2405
---------------------- Constants for registers: ----------------------
-
 
2406
  eax - SF_STYLE_SETTINGS (48)
2148
 
2407
  ebx - SSF_SET_FONT_SIZE (12)
2149
======================================================================
2408
======================================================================
2150
=========== Function 49 - Advanced Power Management (APM). ===========
2409
=========== Function 49 - Advanced Power Management (APM). ===========
2151
======================================================================
2410
======================================================================
2152
Parameters:
2411
Parameters:
2153
  * eax = 49 - function number
2412
  * eax = 49 - function number
2154
  * dx = number of the APM function
2413
  * dx = number of the APM function
2155
    (analogue of ax in APM specification)
2414
    (analogue of ax in APM specification)
2156
  * bx, cx = parameters of the APM function
2415
  * bx, cx = parameters of the APM function
2157
Returned value:
2416
Returned value:
2158
  * 16-bit registers ax, bx, cx, dx, si, di and carry flag CF
2417
  * 16-bit registers ax, bx, cx, dx, si, di and carry flag CF
2159
    are set according to the APM specification
2418
    are set according to the APM specification
2160
  * high halves of 32-bit registers eax, ebx, ecx,
2419
  * high halves of 32-bit registers eax, ebx, ecx,
2161
    edx, esi, edi are destroyed
2420
    edx, esi, edi are destroyed
2162
Remarks:
2421
Remarks:
2163
  * APM 1.2 specification is described in the document
2422
  * APM 1.2 specification is described in the document
2164
    "Advanced Power Management (APM) BIOS Specification"
2423
    "Advanced Power Management (APM) BIOS Specification"
2165
    (Revision 1.2), available at
2424
    (Revision 1.2), available at
2166
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2425
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2167
    besides it is included in famous Interrupt List by Ralf Brown
2426
    besides it is included in famous Interrupt List by Ralf Brown
2168
    (http://www.pobox.com/~ralf/files.html,
2427
    (http://www.pobox.com/~ralf/files.html,
2169
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
2428
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
-
 
2429
 
-
 
2430
---------------------- Constants for registers: ----------------------
2170
 
2431
  eax - SF_APM (49)
2171
======================================================================
2432
======================================================================
2172
=================== Function 50 - set window shape. ==================
2433
=================== Function 50 - set window shape. ==================
2173
======================================================================
2434
======================================================================
2174
Normal windows have rectangular shape. This function can give to
2435
Normal windows have rectangular shape. This function can give to
2175
a window any shape. The shape is given by a set of points inside
2436
a window any shape. The shape is given by a set of points inside
2176
the base rectangle belonging to a window. Position and coordinates
2437
the base rectangle belonging to a window. Position and coordinates
2177
of the base rectangle are set by function 0
2438
of the base rectangle are set by function 0
2178
and changed by function 67.
2439
and changed by function 67.
2179
 
2440
 
2180
--------------------------- Set shape data ---------------------------
2441
--------------------------- Set shape data ---------------------------
2181
Parameters:
2442
Parameters:
2182
  * eax = 50 - function number
2443
  * eax = 50 - function number
2183
  * ebx = 0 - subfunction number
2444
  * ebx = 0 - subfunction number
2184
  * ecx = pointer to shape data (array of bytes 0/1)
2445
  * ecx = pointer to shape data (array of bytes 0/1)
2185
Returned value:
2446
Returned value:
2186
  * function does not return value
2447
  * function does not return value
2187
 
2448
 
2188
-------------------------- Set shape scale ---------------------------
2449
-------------------------- Set shape scale ---------------------------
2189
Parameters:
2450
Parameters:
2190
  * eax = 50 - function number
2451
  * eax = 50 - function number
2191
  * ebx = 1 - subfunction number
2452
  * ebx = 1 - subfunction number
2192
  * ecx sets a scale: each byte of data defines
2453
  * ecx sets a scale: each byte of data defines
2193
    (2^scale)*(2^scale) pixels
2454
    (2^scale)*(2^scale) pixels
2194
Returned value:
2455
Returned value:
2195
  * function does not return value
2456
  * function does not return value
2196
Remarks:
2457
Remarks:
2197
  * Default scale is 0 (scale factor is 1). If in the shape data
2458
  * Default scale is 0 (scale factor is 1). If in the shape data
2198
    one byte corresponds to one pixel, there is no necessity
2459
    one byte corresponds to one pixel, there is no necessity
2199
    to set scale.
2460
    to set scale.
2200
  * Let's designate xsize = window width (in pixels), ysize = height;
2461
  * Let's designate xsize = window width (in pixels), ysize = height;
2201
    pay attention, that they are one pixel more than defined by
2462
    pay attention, that they are one pixel more than defined by
2202
    functions 0, 67.
2463
    functions 0, 67.
2203
  * On definition of scale xsize and ysize must be divisible
2464
  * On definition of scale xsize and ysize must be divisible
2204
    on 2^scale.
2465
    on 2^scale.
2205
  * Byte of data on offset 'a' must be 0/1 and defines belonging
2466
  * Byte of data on offset 'a' must be 0/1 and defines belonging
2206
    to a window of square with the side 2^scale (if scale=0,
2467
    to a window of square with the side 2^scale (if scale=0,
2207
    this is one pixel) and coordinates of the left upper corner
2468
    this is one pixel) and coordinates of the left upper corner
2208
    (a mod (xsize shr scale), a div (xsize shr scale))
2469
    (a mod (xsize shr scale), a div (xsize shr scale))
2209
  * Data size: (xsize shr scale)*(ysize shr scale).
2470
  * Data size: (xsize shr scale)*(ysize shr scale).
2210
  * Data must be presented in the memory and not change
2471
  * Data must be presented in the memory and not change
2211
    after set of shape.
2472
    after set of shape.
2212
  * The system views the shape data at every window redraw by
2473
  * The system views the shape data at every window redraw by
2213
    function 0.
2474
    function 0.
2214
  * The call of subfunction 0 with NULL pointer results in return
2475
  * The call of subfunction 0 with NULL pointer results in return
2215
    to the rectangular shape.
2476
    to the rectangular shape.
-
 
2477
 
-
 
2478
---------------------- Constants for registers: ----------------------
2216
 
2479
  eax - SF_SET_WINDOW_SHAPE (50)
2217
======================================================================
2480
======================================================================
2218
==================== Function 51 - create thread. ====================
2481
==================== Function 51 - create thread. ====================
2219
======================================================================
2482
======================================================================
2220
Parameters:
2483
Parameters:
2221
  * eax = 51 - function number
2484
  * eax = 51 - function number
2222
  * ebx = 1 - unique subfunction
2485
  * ebx = 1 - unique subfunction
2223
  * ecx = address of thread entry point (starting eip)
2486
  * ecx = address of thread entry point (starting eip)
2224
  * edx = pointer to thread stack (starting esp)
2487
  * edx = pointer to thread stack (starting esp)
2225
Returned value:
2488
Returned value:
2226
  * eax = -1 - error (there is too many threads)
2489
  * eax = -1 - error (there is too many threads)
2227
  * otherwise eax = TID - thread identifier
2490
  * otherwise eax = TID - thread identifier
2228
    
-
 
-
 
2491
 
-
 
2492
---------------------- Constants for registers: ----------------------
2229
 
2493
  eax - SF_CREATE_THREAD (51)
2230
======================================================================
2494
======================================================================
2231
==================== Function 54, subfunction 0 ======================
2495
==================== Function 54, subfunction 0 ======================
2232
============== Get the number of slots in the clipboard. =============
2496
============== Get the number of slots in the clipboard. =============
2233
======================================================================
2497
======================================================================
2234
Parameters:
2498
Parameters:
2235
  * eax = 54 - function number
2499
  * eax = 54 - function number
2236
  * ebx = 0 - subfunction number
2500
  * ebx = 0 - subfunction number
2237
Returned value:
2501
Returned value:
2238
  * eax = slots in the clipboard
2502
  * eax = slots in the clipboard
2239
  * eax = -1 - main list area not found
2503
  * eax = -1 - main list area not found
-
 
2504
 
-
 
2505
---------------------- Constants for registers: ----------------------
-
 
2506
  eax - SF_CLIPBOARD (54)
2240
 
2507
  ebx - SSF_GET_SLOT_COUNT (0)
2241
======================================================================
2508
======================================================================
2242
==================== Function 54, subfunction 1 ======================
2509
==================== Function 54, subfunction 1 ======================
2243
================= Read the data from the clipboard. ==================
2510
================= Read the data from the clipboard. ==================
2244
======================================================================
2511
======================================================================
2245
Parameters:
2512
Parameters:
2246
  * eax = 54 - function number
2513
  * eax = 54 - function number
2247
  * ebx = 1 - subfunction number
2514
  * ebx = 1 - subfunction number
2248
  * eсx = slot number
2515
  * eсx = slot number
2249
Returned value:
2516
Returned value:
2250
  * eax = if successful - pointer to a memory with data
2517
  * eax = if successful - pointer to a memory with data
2251
  * eax = 1 - error
2518
  * eax = 1 - error
2252
  * eax = -1 - main list area not found
2519
  * eax = -1 - main list area not found
-
 
2520
 
-
 
2521
---------------------- Constants for registers: ----------------------
-
 
2522
  eax - SF_CLIPBOARD (54)
2253
 
2523
  ebx - SSF_READ_CB (1)
2254
======================================================================
2524
======================================================================
2255
==================== Function 54, subfunction 2 ======================
2525
==================== Function 54, subfunction 2 ======================
2256
================= Write the data to the clipboard. ===================
2526
================= Write the data to the clipboard. ===================
2257
======================================================================
2527
======================================================================
2258
Parameters:
2528
Parameters:
2259
  * eax = 54 - function number
2529
  * eax = 54 - function number
2260
  * ebx = 2 - subfunction number
2530
  * ebx = 2 - subfunction number
2261
  * eсx = the number of bytes to be copied
2531
  * eсx = the number of bytes to be copied
2262
  * edx = a pointer to a buffer for data to be copied
2532
  * edx = a pointer to a buffer for data to be copied
2263
Returned value:
2533
Returned value:
2264
  * eax = 0 - success
2534
  * eax = 0 - success
2265
  * eax = 1 - error
2535
  * eax = 1 - error
2266
  * eax = -1 - main list area not found
2536
  * eax = -1 - main list area not found
-
 
2537
 
-
 
2538
---------------------- Constants for registers: ----------------------
-
 
2539
  eax - SF_CLIPBOARD (54)
2267
 
2540
  ebx - SSF_WRITE_CB (2)
2268
======================================================================
2541
======================================================================
2269
===================== Function 54, subfunction 3 =====================
2542
===================== Function 54, subfunction 3 =====================
2270
================ Delete the last slot in the clipboard ===============
2543
================ Delete the last slot in the clipboard ===============
2271
======================================================================
2544
======================================================================
2272
Parameters:
2545
Parameters:
2273
  * eax = 54 - function number
2546
  * eax = 54 - function number
2274
  * ebx = 3 - subfunction number
2547
  * ebx = 3 - subfunction number
2275
Returned value:
2548
Returned value:
2276
  * eax = 0 - success
2549
  * eax = 0 - success
2277
  * eax = 1 - error
2550
  * eax = 1 - error
2278
  * eax = -1 - main list area not found
2551
  * eax = -1 - main list area not found
-
 
2552
 
-
 
2553
---------------------- Constants for registers: ----------------------
-
 
2554
  eax - SF_CLIPBOARD (54)
2279
  
2555
  ebx - SSF_DEL_SLOT (3)
2280
======================================================================
2556
======================================================================
2281
===================== Function 54, subfunction 4 =====================
2557
===================== Function 54, subfunction 4 =====================
2282
===================== Alarm reset the lock buffer ====================
2558
===================== Alarm reset the lock buffer ====================
2283
======================================================================
2559
======================================================================
2284
Parameters:
2560
Parameters:
2285
  * eax = 54 - function number
2561
  * eax = 54 - function number
2286
  * ebx = 4 - subfunction number
2562
  * ebx = 4 - subfunction number
2287
Returned value:
2563
Returned value:
2288
  * eax = 0 - success
2564
  * eax = 0 - success
2289
  * eax = -1 - main list area not found or no blocking
2565
  * eax = -1 - main list area not found or no blocking
2290
Remarks:
2566
Remarks:
2291
  * Used in exceptional cases, where no responsible or killed
2567
  * Used in exceptional cases, where no responsible or killed
2292
    application blocked the clipboard operations.
2568
    application blocked the clipboard operations.
-
 
2569
 
-
 
2570
---------------------- Constants for registers: ----------------------
-
 
2571
  eax - SF_CLIPBOARD (54)
2293
 
2572
  ebx - SSF_UNLOCK_BUFFER (4)
2294
======================================================================
2573
======================================================================
2295
 Function 55, subfunction 55 - begin to play data on built-in speaker.
2574
 Function 55, subfunction 55 - begin to play data on built-in speaker.
2296
======================================================================
2575
======================================================================
2297
Parameters:
2576
Parameters:
2298
  * eax = 55 - function number
2577
  * eax = 55 - function number
2299
  * ebx = 55 - subfunction number
2578
  * ebx = 55 - subfunction number
2300
  * esi = pointer to data
2579
  * esi = pointer to data
2301
Returned value:
2580
Returned value:
2302
  * eax = 0 - success
2581
  * eax = 0 - success
2303
  * eax = 55 - error (speaker is off or busy)
2582
  * eax = 55 - error (speaker is off or busy)
2304
Data is an array of items with variable length.
2583
Data is an array of items with variable length.
2305
Format of each item is defined by first byte:
2584
Format of each item is defined by first byte:
2306
  * 0 = end of data
2585
  * 0 = end of data
2307
  * 1..0x80 = sets sound duration on 1/100 of second; sound note
2586
  * 1..0x80 = sets sound duration on 1/100 of second; sound note
2308
    is defined by immediate value of frequency
2587
    is defined by immediate value of frequency
2309
    * following word (2 bytes) contains frequency divider;
2588
    * following word (2 bytes) contains frequency divider;
2310
      frequency is defined as 1193180/divider
2589
      frequency is defined as 1193180/divider
2311
  * 0x81 = invalid
2590
  * 0x81 = invalid
2312
  * 0x82..0xFF = note is defined by octave and number:
2591
  * 0x82..0xFF = note is defined by octave and number:
2313
    * duration in 1/100 of second = (first byte)-0x81
2592
    * duration in 1/100 of second = (first byte)-0x81
2314
    * there is one more byte;
2593
    * there is one more byte;
2315
    * (second byte)=0xFF - delay
2594
    * (second byte)=0xFF - delay
2316
    * otherwise it looks like a*0x10+b, where b=number of the note in
2595
    * otherwise it looks like a*0x10+b, where b=number of the note in
2317
      an octave from 1 to 12, a=number of octave (beginning from 0)
2596
      an octave from 1 to 12, a=number of octave (beginning from 0)
2318
Remarks:
2597
Remarks:
2319
  * Speaker play can be disabled/enabled by
2598
  * Speaker play can be disabled/enabled by
2320
    subfunction 8 of function 18.
2599
    subfunction 8 of function 18.
2321
  * Function returns control, having informed the system
2600
  * Function returns control, having informed the system
2322
    an information on request. Play itself goes independently from
2601
    an information on request. Play itself goes independently from
2323
    the program.
2602
    the program.
2324
  * The data must be kept in the memory at least up to the end
2603
  * The data must be kept in the memory at least up to the end
2325
    of play.
2604
    of play.
-
 
2605
 
-
 
2606
---------------------- Constants for registers: ----------------------
2326
 
2607
  eax - SF_SPEAKER_PLAY (55)
2327
======================================================================
2608
======================================================================
2328
======================= Function 57 - PCI BIOS. ======================
2609
======================= Function 57 - PCI BIOS. ======================
2329
======================================================================
2610
======================================================================
2330
Parameters:
2611
Parameters:
2331
  * eax = 57 - function number
2612
  * eax = 57 - function number
2332
  * ebp corresponds to al in PCI BIOS specification
2613
  * ebp corresponds to al in PCI BIOS specification
2333
  * other registers are set according to PCI BIOS specification
2614
  * other registers are set according to PCI BIOS specification
2334
Returned value:
2615
Returned value:
2335
  * CF is undefined
2616
  * CF is undefined
2336
  * other registers are set according to PCI BIOS specification
2617
  * other registers are set according to PCI BIOS specification
2337
Remarks:
2618
Remarks:
2338
  * Many effects of this function can be also achieved with
2619
  * Many effects of this function can be also achieved with
2339
    corresponding subfunctions of function 62.
2620
    corresponding subfunctions of function 62.
2340
  * The function calls PCI32 BIOS extension, documented e.g. in
2621
  * The function calls PCI32 BIOS extension, documented e.g. in
2341
    http://alpha1.dyns.net/files/PCI/bios21.pdf.
2622
    http://alpha1.dyns.net/files/PCI/bios21.pdf.
2342
  * If BIOS does not support this extension, its behavior is emulated
2623
  * If BIOS does not support this extension, its behavior is emulated
2343
    (through kernel-mode analogues of subfunctions of function 62).
2624
    (through kernel-mode analogues of subfunctions of function 62).
-
 
2625
 
-
 
2626
---------------------- Constants for registers: ----------------------
2344
 
2627
  eax - SF_PCI_BIOS (57)
2345
======================================================================
2628
======================================================================
2346
========== Function 60 - Inter Process Communication (IPC). ==========
2629
========== Function 60 - Inter Process Communication (IPC). ==========
2347
======================================================================
2630
======================================================================
2348
IPC is used for message dispatching from one process/thread to
2631
IPC is used for message dispatching from one process/thread to
2349
another. Previously it is necessary to agree how to interpret
2632
another. Previously it is necessary to agree how to interpret
2350
the concrete message.
2633
the concrete message.
2351
 
2634
 
2352
----------- Subfunction 1 - set the area for IPC receiving -----------
2635
----------- Subfunction 1 - set the area for IPC receiving -----------
2353
Is called by process-receiver.
2636
Is called by process-receiver.
2354
Parameters:
2637
Parameters:
2355
  * eax = 60 - function number
2638
  * eax = 60 - function number
2356
  * ebx = 1 - subfunction number
2639
  * ebx = 1 - subfunction number
2357
  * ecx = pointer to the buffer
2640
  * ecx = pointer to the buffer
2358
  * edx = size of the buffer
2641
  * edx = size of the buffer
2359
Returned value:
2642
Returned value:
2360
  * eax = 0 - always success
2643
  * eax = 0 - always success
2361
Format of IPC-buffer:
2644
Format of IPC-buffer:
2362
  * +0: dword: if nonzero, buffer is considered locked;
2645
  * +0: dword: if nonzero, buffer is considered locked;
2363
    lock/unlock the buffer, when you work with it and need that
2646
    lock/unlock the buffer, when you work with it and need that
2364
    buffer data are not changed from outside (no new messages)
2647
    buffer data are not changed from outside (no new messages)
2365
  * +4: dword: occupied place in the buffer (in bytes)
2648
  * +4: dword: occupied place in the buffer (in bytes)
2366
  * +8: first message
2649
  * +8: first message
2367
  * +8+n: second message
2650
  * +8+n: second message
2368
  * ...
2651
  * ...
2369
Format of a message:
2652
Format of a message:
2370
  * +0: dword: PID of sender
2653
  * +0: dword: PID of sender
2371
  * +4: dword: message length (not including this header)
2654
  * +4: dword: message length (not including this header)
2372
  * +8: n*byte: message data
2655
  * +8: n*byte: message data
2373
 
2656
 
2374
------------------ Subfunction 2 - send IPC message ------------------
2657
------------------ Subfunction 2 - send IPC message ------------------
2375
Is called by process-sender.
2658
Is called by process-sender.
2376
Parameters:
2659
Parameters:
2377
  * eax = 60 - function number
2660
  * eax = 60 - function number
2378
  * ebx = 2 - subfunction number
2661
  * ebx = 2 - subfunction number
2379
  * ecx = PID of receiver
2662
  * ecx = PID of receiver
2380
  * edx = pointer to the message data
2663
  * edx = pointer to the message data
2381
  * esi = message length (in bytes)
2664
  * esi = message length (in bytes)
2382
Returned value:
2665
Returned value:
2383
  * eax = 0 - success
2666
  * eax = 0 - success
2384
  * eax = 1 - the receiver has not defined buffer for IPC messages
2667
  * eax = 1 - the receiver has not defined buffer for IPC messages
2385
    (can be, still have no time,
2668
    (can be, still have no time,
2386
    and can be, this is not right process)
2669
    and can be, this is not right process)
2387
  * eax = 2 - the receiver has blocked IPC-buffer; try to wait a bit
2670
  * eax = 2 - the receiver has blocked IPC-buffer; try to wait a bit
2388
  * eax = 3 - overflow of IPC-buffer of the receiver
2671
  * eax = 3 - overflow of IPC-buffer of the receiver
2389
  * eax = 4 - process/thread with such PID does not exist
2672
  * eax = 4 - process/thread with such PID does not exist
2390
Remarks:
2673
Remarks:
2391
  * Immediately after writing of IPC-message to the buffer the system
2674
  * Immediately after writing of IPC-message to the buffer the system
2392
    sends to the receiver the event with code 7 (see event codes).
2675
    sends to the receiver the event with code 7 (see event codes).
-
 
2676
 
-
 
2677
---------------------- Constants for registers: ----------------------
-
 
2678
  eax - SF_IPC (60)
2393
 
2679
  ebx - SSF_SET_AREA (1), SSF_SEND_MESSAGE (2)
2394
======================================================================
2680
======================================================================
2395
==== Function 61 - get parameters for the direct graphics access. ====
2681
==== Function 61 - get parameters for the direct graphics access. ====
2396
======================================================================
2682
======================================================================
2397
The data of the graphics screen (the memory area which displays
2683
The data of the graphics screen (the memory area which displays
2398
screen contents) are accessible to a program directly, without
2684
screen contents) are accessible to a program directly, without
2399
any system calls, through the selector gs:
2685
any system calls, through the selector gs:
2400
        mov     eax, [gs:0]
2686
        mov     eax, [gs:0]
2401
places in eax the first dword of the buffer, which contains
2687
places in eax the first dword of the buffer, which contains
2402
information on color of the left upper point (and, possibly, colors
2688
information on color of the left upper point (and, possibly, colors
2403
of several following).
2689
of several following).
2404
        mov     [gs:0], eax
2690
        mov     [gs:0], eax
2405
by work in VESA modes with LFB sets color of the left upper point
2691
by work in VESA modes with LFB sets color of the left upper point
2406
(and, possibly, colors of several following).
2692
(and, possibly, colors of several following).
2407
To interpret the data of graphics screen program needs to know
2693
To interpret the data of graphics screen program needs to know
2408
some parameters, returning by this function.
2694
some parameters, returning by this function.
2409
Remarks:
2695
Remarks:
2410
  * Graphics parameters changes very seldom at work,
2696
  * Graphics parameters changes very seldom at work,
2411
    namely, only in cases, when user works with the application VRR.
2697
    namely, only in cases, when user works with the application VRR.
2412
  * At videomode change the system redraws all windows (event
2698
  * At videomode change the system redraws all windows (event
2413
    with code 1) and redraws the background (event 5).
2699
    with code 1) and redraws the background (event 5).
2414
    Same events occur in other cases too, which meet much more often,
2700
    Same events occur in other cases too, which meet much more often,
2415
    than videomode change.
2701
    than videomode change.
2416
  * By operation in videomodes with LFB the selector gs points to
2702
  * By operation in videomodes with LFB the selector gs points to
2417
    LFB itself, so reading/writing on gs result directly in
2703
    LFB itself, so reading/writing on gs result directly in
2418
    change of screen contents. By operation in videomodes without
2704
    change of screen contents. By operation in videomodes without
2419
    LFB gs points to some data area in the kernel, and all functions
2705
    LFB gs points to some data area in the kernel, and all functions
2420
    of screen output fulfil honesty double operation on writing
2706
    of screen output fulfil honesty double operation on writing
2421
    directly to the screen and writing to this buffer. In result
2707
    directly to the screen and writing to this buffer. In result
2422
    at reading contents of this buffer the results correspond to
2708
    at reading contents of this buffer the results correspond to
2423
    screen contents (with, generally speaking, large color
2709
    screen contents (with, generally speaking, large color
2424
    resolution), and writing is ignored.
2710
    resolution), and writing is ignored.
2425
    One exception is the mode 320*200, for which main loop of the
2711
    One exception is the mode 320*200, for which main loop of the
2426
    system thread updates the screen according to mouse movements.
2712
    system thread updates the screen according to mouse movements.
2427
 
2713
 
2428
------------------------- Screen resolution --------------------------
2714
------------------------- Screen resolution --------------------------
2429
Parameters:
2715
Parameters:
2430
  * eax = 61 - function number
2716
  * eax = 61 - function number
2431
  * ebx = 1 - subfunction number
2717
  * ebx = 1 - subfunction number
2432
Returned value:
2718
Returned value:
2433
  * eax = [resolution on x axis]*65536 + [resolution on y axis]
2719
  * eax = [resolution on x axis]*65536 + [resolution on y axis]
2434
Remarks:
2720
Remarks:
2435
  * One can use function 14 paying attention that
2721
  * One can use function 14 paying attention that
2436
    it returns sizes on 1 pixel less. It is fully equivalent way.
2722
    it returns sizes on 1 pixel less. It is fully equivalent way.
2437
 
2723
 
2438
---------------------- Number of bits per pixel ----------------------
2724
---------------------- Number of bits per pixel ----------------------
2439
Parameters:
2725
Parameters:
2440
  * eax = 61 - function number
2726
  * eax = 61 - function number
2441
  * ebx = 2 - subfunction number
2727
  * ebx = 2 - subfunction number
2442
Returned value:
2728
Returned value:
2443
  * eax = number of bits per pixel (24 or 32)
2729
  * eax = number of bits per pixel (24 or 32)
2444
 
2730
 
2445
-------------------- Number of bytes per scanline --------------------
2731
-------------------- Number of bytes per scanline --------------------
2446
Parameters:
2732
Parameters:
2447
  * eax = 61 - function number
2733
  * eax = 61 - function number
2448
  * ebx = 3 - subfunction number
2734
  * ebx = 3 - subfunction number
2449
Returned value:
2735
Returned value:
2450
  * eax = number of bytes occupied by one scanline
2736
  * eax = number of bytes occupied by one scanline
2451
    (horizontal line on the screen)
2737
    (horizontal line on the screen)
-
 
2738
 
-
 
2739
---------------------- Constants for registers: ----------------------
-
 
2740
  eax - SF_GET_GRAPHICAL_PARAMS (61)
-
 
2741
  ebx - SSF_SCREEN_SIZE (1), SSF_BITS_PER_PIXEL (2),
2452
 
2742
    SSF_BYTES_PER_LINE (3)
2453
======================================================================
2743
======================================================================
2454
===== Function 62, subfunction 0 - get version of PCI-interface. =====
2744
===== Function 62, subfunction 0 - get version of PCI-interface. =====
2455
======================================================================
2745
======================================================================
2456
Parameters:
2746
Parameters:
2457
  * eax = 62 - function number
2747
  * eax = 62 - function number
2458
  * bl = 0 - subfunction number
2748
  * bl = 0 - subfunction number
2459
Returned value:
2749
Returned value:
2460
  * eax = -1 - PCI access is disabled; otherwise
2750
  * eax = -1 - PCI access is disabled; otherwise
2461
  * ah.al = version of PCI-interface (ah=version, al=subversion)
2751
  * ah.al = version of PCI-interface (ah=version, al=subversion)
2462
  * high word of eax is zeroed
2752
  * high word of eax is zeroed
2463
Remarks:
2753
Remarks:
2464
  * Previously low-level access to PCI for applications must be
2754
  * Previously low-level access to PCI for applications must be
2465
    enabled by subfunction 12 of function 21.
2755
    enabled by subfunction 12 of function 21.
2466
  * If PCI BIOS is not supported, the value of ax is undefined.
2756
  * If PCI BIOS is not supported, the value of ax is undefined.
-
 
2757
 
-
 
2758
---------------------- Constants for registers: ----------------------
-
 
2759
  eax - SF_PCI (62)
2467
 
2760
  ebx - SSF_GET_VERSION (0)
2468
======================================================================
2761
======================================================================
2469
==== Function 62, subfunction 1 - get number of the last PCI-bus. ====
2762
==== Function 62, subfunction 1 - get number of the last PCI-bus. ====
2470
======================================================================
2763
======================================================================
2471
Parameters:
2764
Parameters:
2472
  * eax = 62 - function number
2765
  * eax = 62 - function number
2473
  * bl = 1 - subfunction number
2766
  * bl = 1 - subfunction number
2474
Returned value:
2767
Returned value:
2475
  * eax = -1 - access to PCI is disabled; otherwise
2768
  * eax = -1 - access to PCI is disabled; otherwise
2476
  * al = number of the last PCI-bus; other bytes of eax are destroyed
2769
  * al = number of the last PCI-bus; other bytes of eax are destroyed
2477
Remarks:
2770
Remarks:
2478
  * Previously low-level access to PCI for applications must be
2771
  * Previously low-level access to PCI for applications must be
2479
    enabled by subfunction 12 of function 21.
2772
    enabled by subfunction 12 of function 21.
2480
  * If PCI BIOS is not supported, the value of ax is undefined.
2773
  * If PCI BIOS is not supported, the value of ax is undefined.
-
 
2774
 
-
 
2775
---------------------- Constants for registers: ----------------------
-
 
2776
  eax - SF_PCI (62)
2481
 
2777
  ebx - SSF_GET_LAST_BUS (1)
2482
======================================================================
2778
======================================================================
2483
===================== Function 62, subfunction 2 =====================
2779
===================== Function 62, subfunction 2 =====================
2484
===== Get mechanism of addressing to the PCI configuration space. ====
2780
===== Get mechanism of addressing to the PCI configuration space. ====
2485
======================================================================
2781
======================================================================
2486
Parameters:
2782
Parameters:
2487
  * eax = 62 - function number
2783
  * eax = 62 - function number
2488
  * bl = 2 - subfunction number
2784
  * bl = 2 - subfunction number
2489
Returned value:
2785
Returned value:
2490
  * eax = -1 - access to PCI is disabled; otherwise
2786
  * eax = -1 - access to PCI is disabled; otherwise
2491
  * al = mechanism (1 or 2); other bytes of eax are destroyed
2787
  * al = mechanism (1 or 2); other bytes of eax are destroyed
2492
Remarks:
2788
Remarks:
2493
  * Previously low-level access to PCI for applications must be
2789
  * Previously low-level access to PCI for applications must be
2494
    enabled by subfunction 12 of function 21.
2790
    enabled by subfunction 12 of function 21.
2495
  * Addressing mechanism is selected depending on
2791
  * Addressing mechanism is selected depending on
2496
    equipment characteristics.
2792
    equipment characteristics.
2497
  * Subfunctions of read and write work automatically
2793
  * Subfunctions of read and write work automatically
2498
    with the selected mechanism.
2794
    with the selected mechanism.
-
 
2795
 
-
 
2796
---------------------- Constants for registers: ----------------------
-
 
2797
  eax - SF_PCI (62)
2499
 
2798
  ebx - SSF_GET_ADRR_MODE (2)
2500
======================================================================
2799
======================================================================
2501
======== Function 62, subfunctions 4,5,6 - read PCI-register. ========
2800
======== Function 62, subfunctions 4,5,6 - read PCI-register. ========
2502
======================================================================
2801
======================================================================
2503
Parameters:
2802
Parameters:
2504
  * eax = 62 - function number
2803
  * eax = 62 - function number
2505
  * bl = 4 - read byte
2804
  * bl = 4 - read byte
2506
  * bl = 5 - read word
2805
  * bl = 5 - read word
2507
  * bl = 6 - read dword
2806
  * bl = 6 - read dword
2508
  * bh = number of PCI-bus
2807
  * bh = number of PCI-bus
2509
  * ch = dddddfff, where ddddd = number of the device on the bus,
2808
  * ch = dddddfff, where ddddd = number of the device on the bus,
2510
    fff = function number of device
2809
    fff = function number of device
2511
  * cl = number of register (must be even for bl=5,
2810
  * cl = number of register (must be even for bl=5,
2512
    divisible by 4 for bl=6)
2811
    divisible by 4 for bl=6)
2513
Returned value:
2812
Returned value:
2514
  * eax = -1 - error (access to PCI is disabled or parameters
2813
  * eax = -1 - error (access to PCI is disabled or parameters
2515
    are not supported); otherwise
2814
    are not supported); otherwise
2516
  * al/ax/eax (depending on requested size) contains the data;
2815
  * al/ax/eax (depending on requested size) contains the data;
2517
    the other part of register eax is destroyed
2816
    the other part of register eax is destroyed
2518
Remarks:
2817
Remarks:
2519
  * Previously low-level access to PCI for applications must be
2818
  * Previously low-level access to PCI for applications must be
2520
    enabled by subfunction 12 of function 21.
2819
    enabled by subfunction 12 of function 21.
2521
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2820
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2522
    function number. To get access mechanism use subfunction 2.
2821
    function number. To get access mechanism use subfunction 2.
2523
  * Some registers are standard and exist for all devices, some are
2822
  * Some registers are standard and exist for all devices, some are
2524
    defined by the concrete device. The list of registers of the
2823
    defined by the concrete device. The list of registers of the
2525
    first type can be found e.g. in famous
2824
    first type can be found e.g. in famous
2526
    Interrupt List by Ralf Brown
2825
    Interrupt List by Ralf Brown
2527
    (http://www.pobox.com/~ralf/files.html,
2826
    (http://www.pobox.com/~ralf/files.html,
2528
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
2827
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
2529
    registers of the second type must be listed
2828
    registers of the second type must be listed
2530
    in the device documentation.
2829
    in the device documentation.
-
 
2830
 
-
 
2831
---------------------- Constants for registers: ----------------------
-
 
2832
  eax - SF_PCI (62)
2531
 
2833
  ebx - SSF_READ_BYTE (4), SSF_READ_WORD (5), SSF_READ_DWORD (6)
2532
======================================================================
2834
======================================================================
2533
====== Function 62, subfunctions 8,9,10 - write to PCI-register. =====
2835
====== Function 62, subfunctions 8,9,10 - write to PCI-register. =====
2534
======================================================================
2836
======================================================================
2535
Parameters:
2837
Parameters:
2536
  * eax = 62 - function number
2838
  * eax = 62 - function number
2537
  * bl = 8 - write byte
2839
  * bl = 8 - write byte
2538
  * bl = 9 - write word
2840
  * bl = 9 - write word
2539
  * bl = 10 - write dword
2841
  * bl = 10 - write dword
2540
  * bh = number of PCI-bus
2842
  * bh = number of PCI-bus
2541
  * ch = dddddfff, where ddddd = number of the device on the bus,
2843
  * ch = dddddfff, where ddddd = number of the device on the bus,
2542
    fff = function number of device
2844
    fff = function number of device
2543
  * cl = number of register (must be even for bl=9,
2845
  * cl = number of register (must be even for bl=9,
2544
    divisible by 4 for bl=10)
2846
    divisible by 4 for bl=10)
2545
  * dl/dx/edx (depending on requested size) contatins
2847
  * dl/dx/edx (depending on requested size) contatins
2546
    the data to write
2848
    the data to write
2547
Returned value:
2849
Returned value:
2548
  * eax = -1 - error (access to PCI is disabled or parameters
2850
  * eax = -1 - error (access to PCI is disabled or parameters
2549
    are not supported)
2851
    are not supported)
2550
  * eax = 0 - success
2852
  * eax = 0 - success
2551
Remarks:
2853
Remarks:
2552
  * Previously low-level access to PCI for applications must be
2854
  * Previously low-level access to PCI for applications must be
2553
    enabled by subfunction 12 of function 21.
2855
    enabled by subfunction 12 of function 21.
2554
  * 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
2555
    function number. To get access mechanism use subfunction 2.
2857
    function number. To get access mechanism use subfunction 2.
2556
  * Some registers are standard and exist for all devices, some are
2858
  * Some registers are standard and exist for all devices, some are
2557
    defined by the concrete device. The list of registers of the
2859
    defined by the concrete device. The list of registers of the
2558
    first type can be found e.g. in famous Interrupt List by
2860
    first type can be found e.g. in famous Interrupt List by
2559
    Ralf Brown; registers of the second type must be listed
2861
    Ralf Brown; registers of the second type must be listed
2560
    in the device documentation.
2862
    in the device documentation.
-
 
2863
 
-
 
2864
---------------------- Constants for registers: ----------------------
-
 
2865
  eax - SF_PCI (62)
2561
 
2866
  ebx - SSF_WRITE_BYTE (8), SSF_WRITE_WORD (9), SSF_WRITE_DWORD (10)
2562
======================================================================
2867
======================================================================
2563
============== Function 63 - work with the debug board. ==============
2868
============== Function 63 - work with the debug board. ==============
2564
======================================================================
2869
======================================================================
2565
The debug board is the global system buffer (with the size
2870
The debug board is the global system buffer (with the size
2566
1024 bytes), to which any program can write (generally speaking,
2871
1024 bytes), to which any program can write (generally speaking,
2567
arbitrary) data and from which other program can read these data.
2872
arbitrary) data and from which other program can read these data.
2568
By the agreement written data are text strings interpreted as
2873
By the agreement written data are text strings interpreted as
2569
debug messages on a course of program execution. The kernel in
2874
debug messages on a course of program execution. The kernel in
2570
some situations also writes to the debug board information on
2875
some situations also writes to the debug board information on
2571
execution of some functions; by the agreement kernel messages
2876
execution of some functions; by the agreement kernel messages
2572
begins from the prefix "K : ".
2877
begins from the prefix "K : ".
2573
For view of the debug board the application 'board' was created,
2878
For view of the debug board the application 'board' was created,
2574
which reads data from the buffer and displays them in its window.
2879
which reads data from the buffer and displays them in its window.
2575
'board' interpretes the sequence of codes 13,10 as newline.
2880
'board' interpretes the sequence of codes 13,10 as newline.
2576
A character with null code in an end of line is not necessary,
2881
A character with null code in an end of line is not necessary,
2577
but also does not prevent.
2882
but also does not prevent.
2578
Because debugger has been written, the value of the debug board
2883
Because debugger has been written, the value of the debug board
2579
has decreased, as debugger allows to inspect completely a course of
2884
has decreased, as debugger allows to inspect completely a course of
2580
program execution without any efforts from the direction of program
2885
program execution without any efforts from the direction of program
2581
itself. Nevertheless in some cases the debug board is still useful.
2886
itself. Nevertheless in some cases the debug board is still useful.
2582
 
2887
 
2583
----------------------------- Write byte -----------------------------
2888
----------------------------- Write byte -----------------------------
2584
Parameters:
2889
Parameters:
2585
  * eax = 63 - function number
2890
  * eax = 63 - function number
2586
  * ebx = 1 - subfunction number
2891
  * ebx = 1 - subfunction number
2587
  * cl = data byte
2892
  * cl = data byte
2588
Returned value:
2893
Returned value:
2589
  * function does not return value
2894
  * function does not return value
2590
Remarks:
2895
Remarks:
2591
  * Byte is written to the buffer. Buffer size is 512 bytes.
2896
  * Byte is written to the buffer. Buffer size is 512 bytes.
2592
    At buffer overflow all obtained data are lost.
2897
    At buffer overflow all obtained data are lost.
2593
  * For output to the debug board of more complicated objects
2898
  * For output to the debug board of more complicated objects
2594
    (strings, numbers) it is enough to call this function in cycle.
2899
    (strings, numbers) it is enough to call this function in cycle.
2595
    It is possible not to write the appropriate code manually and use
2900
    It is possible not to write the appropriate code manually and use
2596
    file 'debug.inc', which is included into the distributive.
2901
    file 'debug.inc', which is included into the distributive.
2597
 
2902
 
2598
----------------------------- Read byte ------------------------------
2903
----------------------------- Read byte ------------------------------
2599
Takes away byte from the buffer.
2904
Takes away byte from the buffer.
2600
Parameters:
2905
Parameters:
2601
  * eax = 63 - function number
2906
  * eax = 63 - function number
2602
  * ebx = 2 - subfunction number
2907
  * ebx = 2 - subfunction number
2603
Returned value:
2908
Returned value:
2604
  * eax = ebx = 0 - the buffer is empty
2909
  * eax = ebx = 0 - the buffer is empty
2605
  * eax = byte, ebx = 1 - byte was successfully read
2910
  * eax = byte, ebx = 1 - byte was successfully read
-
 
2911
 
-
 
2912
---------------------- Constants for registers: ----------------------
-
 
2913
  eax - SF_BOARD (63)
2606
 
2914
  ebx - SSF_DEBUG_WRITE (1), SSF_DEBUG_READ (2)
2607
======================================================================
2915
======================================================================
2608
============== Function 64 - resize application memory. ==============
2916
============== Function 64 - resize application memory. ==============
2609
======================================================================
2917
======================================================================
2610
Parameters:
2918
Parameters:
2611
  * eax = 64 - function number
2919
  * eax = 64 - function number
2612
  * ebx = 1 - unique subfunction
2920
  * ebx = 1 - unique subfunction
2613
  * ecx = new memory size
2921
  * ecx = new memory size
2614
Returned value:
2922
Returned value:
2615
  * eax = 0 - success
2923
  * eax = 0 - success
2616
  * eax = 1 - not enough memory
2924
  * eax = 1 - not enough memory
2617
Remarks:
2925
Remarks:
2618
  * There is another way to dynamically allocate/free memory -
2926
  * There is another way to dynamically allocate/free memory -
2619
    subfunctions 11, 12, 13 of function 68.
2927
    subfunctions 11, 12, 13 of function 68.
2620
  * The function cannot be used together with 68.11, 68.12, 68.13.
2928
  * The function cannot be used together with 68.11, 68.12, 68.13.
2621
    The function call will be ignored after creation of process heap
2929
    The function call will be ignored after creation of process heap
2622
    with function 68.11.
2930
    with function 68.11.
-
 
2931
 
-
 
2932
---------------------- Constants for registers: ----------------------
2623
 
2933
  eax - SF_MEMORY_RESIZE (64)
2624
======================================================================
2934
======================================================================
2625
======== Function 65 - draw image with palette in the window. ========
2935
======== Function 65 - draw image with palette in the window. ========
2626
======================================================================
2936
======================================================================
2627
Parameters:
2937
Parameters:
2628
  * eax = 65 - function number
2938
  * eax = 65 - function number
2629
  * ebx = pointer to the image
2939
  * ebx = pointer to the image
2630
  * ecx = [size on axis x]*65536 + [size on axis y]
2940
  * ecx = [size on axis x]*65536 + [size on axis y]
2631
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2941
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2632
  * esi = number of bits per pixel, must be 1,2,4,8,9,15,16,24 or 32;
2942
  * esi = number of bits per pixel, must be 1,2,4,8,9,15,16,24 or 32;
2633
  * edi = pointer to palette (2 to the power esi colors 0x00RRGGBB);
2943
  * edi = pointer to palette (2 to the power esi colors 0x00RRGGBB);
2634
          ignored when esi > 8
2944
          ignored when esi > 8
2635
  * ebp = offset of next row data relative to previous row data
2945
  * ebp = offset of next row data relative to previous row data
2636
Returned value:
2946
Returned value:
2637
  * function does not return value
2947
  * function does not return value
2638
Remarks:
2948
Remarks:
2639
  * Coordinates of the image are coordinates of the upper left corner
2949
  * Coordinates of the image are coordinates of the upper left corner
2640
    of the image relative to the window.
2950
    of the image relative to the window.
2641
  * Format of image with 1 bit per pixel: each byte of image
2951
  * Format of image with 1 bit per pixel: each byte of image
2642
    (possibly excluding last bytes in rows), contains information on
2952
    (possibly excluding last bytes in rows), contains information on
2643
    the color of 8 pixels, MSB corresponds to first pixel.
2953
    the color of 8 pixels, MSB corresponds to first pixel.
2644
  * Format of image with 2 bits per pixel: each byte of image
2954
  * Format of image with 2 bits per pixel: each byte of image
2645
    (possibly excluding last bytes in rows), contains information on
2955
    (possibly excluding last bytes in rows), contains information on
2646
    the color of 4 pixels, two MSBs correspond to first pixel.
2956
    the color of 4 pixels, two MSBs correspond to first pixel.
2647
  * Format of image with 4 bits per pixel: each byte of image
2957
  * Format of image with 4 bits per pixel: each byte of image
2648
    excluding last bytes in rows (if width is odd) contains
2958
    excluding last bytes in rows (if width is odd) contains
2649
    information on the color of 2 pixels, high-order tetrad
2959
    information on the color of 2 pixels, high-order tetrad
2650
    corresponds to first pixel.
2960
    corresponds to first pixel.
2651
  * Format of image with 8 bits per pixel: each byte of image is
2961
  * Format of image with 8 bits per pixel: each byte of image is
2652
    index in the palette.
2962
    index in the palette.
2653
  * Format of image with 9 bits per pixel: array of one byte values;
2963
  * Format of image with 9 bits per pixel: array of one byte values;
2654
    each byte (8 bit) represents the intensity of gray for one pixel;
2964
    each byte (8 bit) represents the intensity of gray for one pixel;
2655
    this format is equal to 8bpp without palette.
2965
    this format is equal to 8bpp without palette.
2656
  * Format of image with 15 bits per pixel: the color of each pixel
2966
  * Format of image with 15 bits per pixel: the color of each pixel
2657
    is coded as (bit representation) 0RRRRRGGGGGBBBBB - 5 bits per
2967
    is coded as (bit representation) 0RRRRRGGGGGBBBBB - 5 bits per
2658
    each color.
2968
    each color.
2659
  * Format of image with 16 bits per pixel: the color of each pixel
2969
  * Format of image with 16 bits per pixel: the color of each pixel
2660
    is coded as RRRRRGGGGGGBBBBB (5+6+5).
2970
    is coded as RRRRRGGGGGGBBBBB (5+6+5).
2661
  * Format of image with 24 bits per pixel: the color of each pixel
2971
  * Format of image with 24 bits per pixel: the color of each pixel
2662
    is coded as 3 bytes - sequentially blue, green, red components.
2972
    is coded as 3 bytes - sequentially blue, green, red components.
2663
  * Format of image with 32 bits per pixel: similar to 24, but
2973
  * Format of image with 32 bits per pixel: similar to 24, but
2664
    one additional ignored byte is present.
2974
    one additional ignored byte is present.
2665
  * The call to function 7 is equivalent to call to this function
2975
  * The call to function 7 is equivalent to call to this function
2666
    with esi=24, ebp=0.
2976
    with esi=24, ebp=0.
-
 
2977
 
-
 
2978
---------------------- Constants for registers: ----------------------
2667
 
2979
  eax - SF_PUT_IMAGE_EXT (65)
2668
======================================================================
2980
======================================================================
2669
================== Function 66 - work with keyboard. =================
2981
================== Function 66 - work with keyboard. =================
2670
======================================================================
2982
======================================================================
2671
The input mode influences results of reading keys by function 2.
2983
The input mode influences results of reading keys by function 2.
2672
When a program loads, ASCII input mode is set for it.
2984
When a program loads, ASCII input mode is set for it.
2673
 
2985
 
2674
-------------- Subfunction 1 - set keyboard input mode. --------------
2986
-------------- Subfunction 1 - set keyboard input mode. --------------
2675
Parameters:
2987
Parameters:
2676
  * eax = 66 - function number
2988
  * eax = 66 - function number
2677
  * ebx = 1 - subfunction number
2989
  * ebx = 1 - subfunction number
2678
  * ecx = mode:
2990
  * ecx = mode:
2679
    * 0 = normal (ASCII-characters)
2991
    * 0 = normal (ASCII-characters)
2680
    * 1 = scancodes
2992
    * 1 = scancodes
2681
Returned value:
2993
Returned value:
2682
  * function does not return value
2994
  * function does not return value
2683
 
2995
 
2684
-------------- Subfunction 2 - get keyboard input mode. --------------
2996
-------------- Subfunction 2 - get keyboard input mode. --------------
2685
Parameters:
2997
Parameters:
2686
  * eax = 66 - function number
2998
  * eax = 66 - function number
2687
  * ebx = 2 - subfunction number
2999
  * ebx = 2 - subfunction number
2688
Returned value:
3000
Returned value:
2689
  * eax = current mode
3001
  * eax = current mode
2690
 
3002
 
2691
------------ Subfunction 3 - get status of control keys. -------------
3003
------------ Subfunction 3 - get status of control keys. -------------
2692
Parameters:
3004
Parameters:
2693
  * eax = 66 - function number
3005
  * eax = 66 - function number
2694
  * ebx = 3 - subfunction number
3006
  * ebx = 3 - subfunction number
2695
Returned value:
3007
Returned value:
2696
  * eax = bit mask:
3008
  * eax = bit mask:
2697
  * bit 0  (mask 1): left Shift is pressed
3009
  * bit 0  (mask 1): left Shift is pressed
2698
  * bit 1  (mask 2): right Shift is pressed
3010
  * bit 1  (mask 2): right Shift is pressed
2699
  * bit 2  (mask 4): left Ctrl is pressed
3011
  * bit 2  (mask 4): left Ctrl is pressed
2700
  * bit 3  (mask 8): right Ctrl is pressed
3012
  * bit 3  (mask 8): right Ctrl is pressed
2701
  * bit 4  (mask 0x10): left Alt is pressed
3013
  * bit 4  (mask 0x10): left Alt is pressed
2702
  * bit 5  (mask 0x20): right Alt is pressed
3014
  * bit 5  (mask 0x20): right Alt is pressed
2703
  * bit 6  (mask 0x40): CapsLock is on
3015
  * bit 6  (mask 0x40): CapsLock is on
2704
  * bit 7  (mask 0x80): NumLock is on
3016
  * bit 7  (mask 0x80): NumLock is on
2705
  * bit 8  (mask 0x100): ScrollLock is on
3017
  * bit 8  (mask 0x100): ScrollLock is on
2706
  * bit 9  (mask 0x200): left Win is pressed
3018
  * bit 9  (mask 0x200): left Win is pressed
2707
  * bit 10 (mask 0x400): right Win is pressed
3019
  * bit 10 (mask 0x400): right Win is pressed
2708
  * other bits are cleared
3020
  * other bits are cleared
2709
 
3021
 
2710
-------------- Subfunction 4 - set system-wide hotkey. ---------------
3022
-------------- Subfunction 4 - set system-wide hotkey. ---------------
2711
When hotkey is pressed, the system notifies only those applications,
3023
When hotkey is pressed, the system notifies only those applications,
2712
which have installed it; the active application (which receives
3024
which have installed it; the active application (which receives
2713
all normal input) does not receive such keys.
3025
all normal input) does not receive such keys.
2714
The notification consists in sending event with the code 2.
3026
The notification consists in sending event with the code 2.
2715
Reading hotkey is the same as reading normal key - by function 2.
3027
Reading hotkey is the same as reading normal key - by function 2.
2716
Parameters:
3028
Parameters:
2717
  * eax = 66 - function number
3029
  * eax = 66 - function number
2718
  * ebx = 4 - subfunction number
3030
  * ebx = 4 - subfunction number
2719
  * cl determines key scancode;
3031
  * cl determines key scancode;
2720
    use cl=0 to give combinations such as Ctrl+Shift
3032
    use cl=0 to give combinations such as Ctrl+Shift
2721
  * edx = 0xXYZ determines possible states of control keys:
3033
  * edx = 0xXYZ determines possible states of control keys:
2722
    * Z (low 4 bits) determines state of LShift and RShift:
3034
    * Z (low 4 bits) determines state of LShift and RShift:
2723
      * 0 = no key must be pressed;
3035
      * 0 = no key must be pressed;
2724
      * 1 = exactly one key must be pressed;
3036
      * 1 = exactly one key must be pressed;
2725
      * 2 = both keys must be pressed;
3037
      * 2 = both keys must be pressed;
2726
      * 3 = must be pressed LShift, but not RShift;
3038
      * 3 = must be pressed LShift, but not RShift;
2727
      * 4 = must be pressed RShift, but not LShift
3039
      * 4 = must be pressed RShift, but not LShift
2728
    * Y - similar for LCtrl and RCtrl;
3040
    * Y - similar for LCtrl and RCtrl;
2729
    * X - similar for LAlt and RAlt
3041
    * X - similar for LAlt and RAlt
2730
Returned value:
3042
Returned value:
2731
  * eax=0 - success
3043
  * eax=0 - success
2732
  * eax=1 - too mant hotkeys (maximum 256 are allowed)
3044
  * eax=1 - too mant hotkeys (maximum 256 are allowed)
2733
Remarks:
3045
Remarks:
2734
  * Hotkey can work either at pressing or at release. Release
3046
  * Hotkey can work either at pressing or at release. Release
2735
    scancode of a key is more on 128 than pressing scancode
3047
    scancode of a key is more on 128 than pressing scancode
2736
    (i.e. high bit is set).
3048
    (i.e. high bit is set).
2737
  * Several applications can set the same combination;
3049
  * Several applications can set the same combination;
2738
    all such applications will be informed on pressing
3050
    all such applications will be informed on pressing
2739
    such combination.
3051
    such combination.
2740
 
3052
 
2741
-------------- Subfunction 5 - delete installed hotkey. --------------
3053
-------------- Subfunction 5 - delete installed hotkey. --------------
2742
Parameters:
3054
Parameters:
2743
  * eax = 66 - function number
3055
  * eax = 66 - function number
2744
  * ebx = 5 - subfunction number
3056
  * ebx = 5 - subfunction number
2745
  * cl = scancode of key and edx = 0xXYZ the same as in subfunction 4
3057
  * cl = scancode of key and edx = 0xXYZ the same as in subfunction 4
2746
Returned value:
3058
Returned value:
2747
  * eax = 0 - success
3059
  * eax = 0 - success
2748
  * eax = 1 - there is no such hotkey
3060
  * eax = 1 - there is no such hotkey
2749
Remarks:
3061
Remarks:
2750
  * When a process/thread terminates, all hotkey installed by it are
3062
  * When a process/thread terminates, all hotkey installed by it are
2751
    deleted.
3063
    deleted.
2752
  * The call to this subfunction does not affect other applications.
3064
  * The call to this subfunction does not affect other applications.
2753
    If other application has defined the same combination, it will
3065
    If other application has defined the same combination, it will
2754
    still receive notices.
3066
    still receive notices.
2755
 
3067
 
2756
--------------- Subfunction 6 - block the normal input. --------------
3068
--------------- Subfunction 6 - block the normal input. --------------
2757
Parameters:
3069
Parameters:
2758
  * eax = 66 - function number
3070
  * eax = 66 - function number
2759
  * ebx = 6 - subfunction number
3071
  * ebx = 6 - subfunction number
2760
Returned value:
3072
Returned value:
2761
  * function does not return value
3073
  * function does not return value
2762
Remarks:
3074
Remarks:
2763
  * Blocking the normal keyboard input for installed hotkeys
3075
  * Blocking the normal keyboard input for installed hotkeys
2764
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3076
  * To emulate a mouse via the keyboard, the application MOUSEMUL
2765
 
3077
 
2766
------------ Subfunction 7 - unlock the normal input. ----------------
3078
------------ Subfunction 7 - unlock the normal input. ----------------
2767
Parameters:
3079
Parameters:
2768
  * eax = 66 - function number
3080
  * eax = 66 - function number
2769
  * ebx = 7 - subfunction number
3081
  * ebx = 7 - subfunction number
2770
Returned value:
3082
Returned value:
2771
  * function does not return value
3083
  * function does not return value
2772
Remarks:
3084
Remarks:
2773
  * Unlocking the results of the f. 66.6
3085
  * Unlocking the results of the f. 66.6
2774
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3086
  * To emulate a mouse via the keyboard, the application MOUSEMUL
-
 
3087
 
-
 
3088
---------------------- Constants for registers: ----------------------
-
 
3089
  eax - SF_KEYBOARD (66)
-
 
3090
  ebx - SSF_SET_INPUT_MODE (1), SSF_GET_INPUT_MODE (2),
-
 
3091
    SSF_GET_CONTROL_KEYS (3), SSF_SET_SYS_HOTKEY (4),
2775
 
3092
    SSF_DEL_SYS_HOTKEY (5),  SSF_LOCK_INPUT (6), SSF_UNLOCK_INPUT (7)
2776
======================================================================
3093
======================================================================
2777
========= Function 67 - change position/sizes of the window. =========
3094
========= Function 67 - change position/sizes of the window. =========
2778
======================================================================
3095
======================================================================
2779
Parameters:
3096
Parameters:
2780
  * eax = 67 - function number
3097
  * eax = 67 - function number
2781
  * ebx = new x-coordinate of the window
3098
  * ebx = new x-coordinate of the window
2782
  * ecx = new y-coordinate of the window
3099
  * ecx = new y-coordinate of the window
2783
  * edx = new x-size of the window
3100
  * edx = new x-size of the window
2784
  * esi = new y-size of the window
3101
  * esi = new y-size of the window
2785
Returned value:
3102
Returned value:
2786
  * function does not return value
3103
  * function does not return value
2787
Remarks:
3104
Remarks:
2788
  * The value -1 for a parameter means "do not change"; e.g. to move
3105
  * The value -1 for a parameter means "do not change"; e.g. to move
2789
    the window without resizing it is possible to specify edx=esi=-1.
3106
    the window without resizing it is possible to specify edx=esi=-1.
2790
  * Previously the window must be defined by function 0.
3107
  * Previously the window must be defined by function 0.
2791
    It sets initial coordinates and sizes of the window.
3108
    It sets initial coordinates and sizes of the window.
2792
  * Sizes of the window are understood in sense of function 0,
3109
  * Sizes of the window are understood in sense of function 0,
2793
    that is one pixel less than real sizes.
3110
    that is one pixel less than real sizes.
2794
  * The function call for maximized windows is simply ignored.
3111
  * The function call for maximized windows is simply ignored.
2795
  * For windows of appropriate styles position and/or sizes can be
3112
  * For windows of appropriate styles position and/or sizes can be
2796
    changed by user; current position and sizes can be obtained by
3113
    changed by user; current position and sizes can be obtained by
2797
    call to function 9.
3114
    call to function 9.
2798
  * The function sends to the window redraw event (with the code 1).
3115
  * The function sends to the window redraw event (with the code 1).
-
 
3116
 
-
 
3117
---------------------- Constants for registers: ----------------------
2799
 
3118
  eax - SF_CHANGE_WINDOW (67)
2800
======================================================================
3119
======================================================================
2801
====== Function 68, subfunction 0 - get the task switch counter. =====
3120
====== Function 68, subfunction 0 - get the task switch counter. =====
2802
======================================================================
3121
======================================================================
2803
Parameters:
3122
Parameters:
2804
  * eax = 68 - function number
3123
  * eax = 68 - function number
2805
  * ebx = 0 - subfunction number
3124
  * ebx = 0 - subfunction number
2806
Returned value:
3125
Returned value:
2807
  * eax = number of task switches from the system booting
3126
  * eax = number of task switches from the system booting
2808
    (modulo 2^32)
3127
    (modulo 2^32)
-
 
3128
 
-
 
3129
---------------------- Constants for registers: ----------------------
-
 
3130
  eax - SF_SYS_MISC (68)
2809
 
3131
  ebx - SSF_GET_TASK_SWITCH_COUNT (0)
2810
======================================================================
3132
======================================================================
2811
======= Function 68, subfunction 1 - switch to the next thread. ======
3133
======= Function 68, subfunction 1 - switch to the next thread. ======
2812
======================================================================
3134
======================================================================
2813
The function completes the current time slice allocated to the
3135
The function completes the current time slice allocated to the
2814
thread and switches to the next. (Which thread in which process
3136
thread and switches to the next. (Which thread in which process
2815
will be next, is unpredictable). Later, when execution queue
3137
will be next, is unpredictable). Later, when execution queue
2816
will reach the current thread, execution will be continued.
3138
will reach the current thread, execution will be continued.
2817
Parameters:
3139
Parameters:
2818
  * eax = 68 - function number
3140
  * eax = 68 - function number
2819
  * ebx = 1 - subfunction number
3141
  * ebx = 1 - subfunction number
2820
Returned value:
3142
Returned value:
2821
  * function does not return value
3143
  * function does not return value
-
 
3144
 
-
 
3145
---------------------- Constants for registers: ----------------------
-
 
3146
  eax - SF_SYS_MISC (68)
2822
 
3147
  ebx - SSF_SWITCH_TASK (1)
2823
======================================================================
3148
======================================================================
2824
============= Function 68, subfunction 2 - cache + rdpmc. ============
3149
============= Function 68, subfunction 2 - cache + rdpmc. ============
2825
======================================================================
3150
======================================================================
2826
Parameters:
3151
Parameters:
2827
  * eax = 68 - function number
3152
  * eax = 68 - function number
2828
  * ebx = 2 - subfunction number
3153
  * ebx = 2 - subfunction number
2829
  * ecx = required action:
3154
  * ecx = required action:
2830
    * ecx = 0 - enable instruction 'rdpmc'
3155
    * ecx = 0 - enable instruction 'rdpmc'
2831
      (ReaD Performance-Monitoring Counters) for applications
3156
      (ReaD Performance-Monitoring Counters) for applications
2832
    * ecx = 1 - find out whether cache is disabled/enabled
3157
    * ecx = 1 - find out whether cache is disabled/enabled
2833
    * ecx = 2 - enable cache
3158
    * ecx = 2 - enable cache
2834
    * ecx = 3 - disable cache
3159
    * ecx = 3 - disable cache
2835
Returned value:
3160
Returned value:
2836
  * for ecx=0:
3161
  * for ecx=0:
2837
    * eax = the value of cr4
3162
    * eax = the value of cr4
2838
  * for ecx=1:
3163
  * for ecx=1:
2839
    * eax = (cr0 and 0x60000000):
3164
    * eax = (cr0 and 0x60000000):
2840
    * eax = 0 - cache is on
3165
    * eax = 0 - cache is on
2841
    * eax <> 0 - cache is off
3166
    * eax <> 0 - cache is off
2842
  * for ecx=2 and ecx=3:
3167
  * for ecx=2 and ecx=3:
2843
    * function does not return value
3168
    * function does not return value
-
 
3169
 
-
 
3170
---------------------- Constants for registers: ----------------------
-
 
3171
  eax - SF_SYS_MISC (68)
-
 
3172
  ebx - SSF_PERFORMANCE (2)
-
 
3173
  ecx - SSSF_ALLOW_RDPMC (0), SSSF_CACHE_STATUS (1),
2844
 
3174
    SSSF_CACHE_ON (2), SSSF_CACHE_OFF (3)
2845
======================================================================
3175
======================================================================
2846
=========== Function 68, subfunction 3 - read MSR-register. ==========
3176
=========== Function 68, subfunction 3 - read MSR-register. ==========
2847
======================================================================
3177
======================================================================
2848
MSR = Model Specific Register; the complete list of MSR-registers
3178
MSR = Model Specific Register; the complete list of MSR-registers
2849
of a processor is included to the documentation on it (for example,
3179
of a processor is included to the documentation on it (for example,
2850
IA-32 Intel Architecture Software Developer's Manual,
3180
IA-32 Intel Architecture Software Developer's Manual,
2851
Volume 3, Appendix B); each processor family has its own subset
3181
Volume 3, Appendix B); each processor family has its own subset
2852
of the MSR-registers.
3182
of the MSR-registers.
2853
Parameters:
3183
Parameters:
2854
  * eax = 68 - function number
3184
  * eax = 68 - function number
2855
  * ebx = 3 - subfunction number
3185
  * ebx = 3 - subfunction number
2856
  * ecx is ignored
3186
  * ecx is ignored
2857
  * edx = MSR address
3187
  * edx = MSR address
2858
Returned value:
3188
Returned value:
2859
  * ebx:eax = high:low dword of the result
3189
  * ebx:eax = high:low dword of the result
2860
Remarks:
3190
Remarks:
2861
  * If ecx contains nonexistent or not implemented for this processor
3191
  * If ecx contains nonexistent or not implemented for this processor
2862
    MSR, processor will generate an exception in the kernel, which
3192
    MSR, processor will generate an exception in the kernel, which
2863
    will kill the thread.
3193
    will kill the thread.
2864
  * Previously it is necessary to check, whether MSRs are supported
3194
  * Previously it is necessary to check, whether MSRs are supported
2865
    as a whole, with the instruction 'cpuid'. Otherwise processor
3195
    as a whole, with the instruction 'cpuid'. Otherwise processor
2866
    will generate other exception in the kernel, which will anyway
3196
    will generate other exception in the kernel, which will anyway
2867
    kill the thread.
3197
    kill the thread.
-
 
3198
 
-
 
3199
---------------------- Constants for registers: ----------------------
-
 
3200
  eax - SF_SYS_MISC (68)
2868
 
3201
  ebx - SSF_READ_MSR (3)
2869
======================================================================
3202
======================================================================
2870
========= Function 68, subfunction 4 - write to MSR-register. ========
3203
========= Function 68, subfunction 4 - write to MSR-register. ========
2871
======================================================================
3204
======================================================================
2872
MSR = Model Specific Register; the complete list of MSR-registers
3205
MSR = Model Specific Register; the complete list of MSR-registers
2873
of a processor is included to the documentation on it (for example,
3206
of a processor is included to the documentation on it (for example,
2874
IA-32 Intel Architecture Software Developer's Manual,
3207
IA-32 Intel Architecture Software Developer's Manual,
2875
Volume 3, Appendix B); each processor family has its own subset
3208
Volume 3, Appendix B); each processor family has its own subset
2876
of the MSR-registers.
3209
of the MSR-registers.
2877
Parameters:
3210
Parameters:
2878
  * eax = 68 - function number
3211
  * eax = 68 - function number
2879
  * ebx = 4 - subfunction number
3212
  * ebx = 4 - subfunction number
2880
  * ecx is ignored
3213
  * ecx is ignored
2881
  * edx = MSR address
3214
  * edx = MSR address
2882
  * esi:edi = high:low dword
3215
  * esi:edi = high:low dword
2883
Returned value:
3216
Returned value:
2884
  * function does not return value
3217
  * function does not return value
2885
Remarks:
3218
Remarks:
2886
  * If ecx contains nonexistent or not implemented for this processor
3219
  * If ecx contains nonexistent or not implemented for this processor
2887
    MSR, processor will generate an exception in the kernel, which
3220
    MSR, processor will generate an exception in the kernel, which
2888
    will kill the thread.
3221
    will kill the thread.
2889
  * Previously it is necessary to check, whether MSRs are supported
3222
  * Previously it is necessary to check, whether MSRs are supported
2890
    as a whole, with the instruction 'cpuid'. Otherwise processor
3223
    as a whole, with the instruction 'cpuid'. Otherwise processor
2891
    will generate other exception in the kernel, which will anyway
3224
    will generate other exception in the kernel, which will anyway
2892
    kill the thread.
3225
    kill the thread.
-
 
3226
 
-
 
3227
---------------------- Constants for registers: ----------------------
-
 
3228
  eax - SF_SYS_MISC (68)
2893
 
3229
  ebx - SSF_WRITE_MSR (4)
2894
======================================================================
3230
======================================================================
2895
======= Function 68, subfunction 11 - initialize process heap. =======
3231
======= Function 68, subfunction 11 - initialize process heap. =======
2896
======================================================================
3232
======================================================================
2897
Parameters:
3233
Parameters:
2898
  * eax = 68 - function number
3234
  * eax = 68 - function number
2899
  * ebx = 11 - subfunction number
3235
  * ebx = 11 - subfunction number
2900
Returned value:
3236
Returned value:
2901
  * eax = 0 - failed
3237
  * eax = 0 - failed
2902
  * otherwise size of created heap
3238
  * otherwise size of created heap
2903
Remarks:
3239
Remarks:
2904
  * The function call initializes heap, from which one can in future
3240
  * The function call initializes heap, from which one can in future
2905
    allocate and free memory blocks with subfunctions 12 and 13.
3241
    allocate and free memory blocks with subfunctions 12 and 13.
2906
    Heap size is equal to total amount of free application memory.
3242
    Heap size is equal to total amount of free application memory.
2907
  * The second function call from the same process results in
3243
  * The second function call from the same process results in
2908
    returning the size of the existing heap.
3244
    returning the size of the existing heap.
2909
  * After creation of the heap calls to function 64 will be ignored.
3245
  * After creation of the heap calls to function 64 will be ignored.
-
 
3246
 
-
 
3247
---------------------- Constants for registers: ----------------------
-
 
3248
  eax - SF_SYS_MISC (68)
2910
 
3249
  ebx - SSF_HEAP_INIT (11)
2911
======================================================================
3250
======================================================================
2912
======== Function 68, subfunction 12 - allocate memory block. ========
3251
======== Function 68, subfunction 12 - allocate memory block. ========
2913
======================================================================
3252
======================================================================
2914
Parameters:
3253
Parameters:
2915
  * eax = 68 - function number
3254
  * eax = 68 - function number
2916
  * ebx = 12 - subfunction number
3255
  * ebx = 12 - subfunction number
2917
  * ecx = required size in bytes
3256
  * ecx = required size in bytes
2918
Returned value:
3257
Returned value:
2919
  * eax = pointer to the allocated block
3258
  * eax = pointer to the allocated block
2920
Remarks:
3259
Remarks:
2921
  * Before this call one must initialize process heap by call to
3260
  * Before this call one must initialize process heap by call to
2922
    subfunction 11.
3261
    subfunction 11.
2923
  * The function allocates an integer number of pages (4 Kb) in such
3262
  * The function allocates an integer number of pages (4 Kb) in such
2924
    way that the real size of allocated block is more than or equal to
3263
    way that the real size of allocated block is more than or equal to
2925
    requested size.
3264
    requested size.
-
 
3265
 
-
 
3266
---------------------- Constants for registers: ----------------------
-
 
3267
  eax - SF_SYS_MISC (68)
2926
 
3268
  ebx - SSF_MEM_ALLOC (12)
2927
======================================================================
3269
======================================================================
2928
========== Function 68, subfunction 13 - free memory block. ==========
3270
========== Function 68, subfunction 13 - free memory block. ==========
2929
======================================================================
3271
======================================================================
2930
Parameters:
3272
Parameters:
2931
  * eax = 68 - function number
3273
  * eax = 68 - function number
2932
  * ebx = 13 - subfunction number
3274
  * ebx = 13 - subfunction number
2933
  * ecx = pointer to the memory block
3275
  * ecx = pointer to the memory block
2934
Returned value:
3276
Returned value:
2935
  * eax = 1 - success
3277
  * eax = 1 - success
2936
  * eax = 0 - failed
3278
  * eax = 0 - failed
2937
Remarks:
3279
Remarks:
2938
  * The memory block must have been allocated by subfunction 12
3280
  * The memory block must have been allocated by subfunction 12
2939
    or subfunction 20.
3281
    or subfunction 20.
-
 
3282
 
-
 
3283
---------------------- Constants for registers: ----------------------
-
 
3284
  eax - SF_SYS_MISC (68)
2940
 
3285
  ebx - SSF_MEM_FREE (13)
2941
======================================================================
3286
======================================================================
2942
===================== Function 68, subfunction 14 ====================
3287
===================== Function 68, subfunction 14 ====================
2943
============ Wait for signal from another program/driver. ============
3288
============ Wait for signal from another program/driver. ============
2944
======================================================================
3289
======================================================================
2945
Parameters:
3290
Parameters:
2946
  * eax = 68 - function number
3291
  * eax = 68 - function number
2947
  * ebx = 14 - subfunction number
3292
  * ebx = 14 - subfunction number
2948
  * ecx = pointer to the buffer for information (24 bytes)
3293
  * ecx = pointer to the buffer for information (24 bytes)
2949
Returned value:
3294
Returned value:
2950
  * buffer pointed to by ecx contains the following information:
3295
  * buffer pointed to by ecx contains the following information:
2951
    * +0: dword: identifier for following data of signal
3296
    * +0: dword: identifier for following data of signal
2952
    * +4: dword: data of signal (20 bytes), format of which is defined
3297
    * +4: dword: data of signal (20 bytes), format of which is defined
2953
          by the first dword
3298
          by the first dword
-
 
3299
 
-
 
3300
---------------------- Constants for registers: ----------------------
-
 
3301
  eax - SF_SYS_MISC (68)
2954
 
3302
  ebx - SSF_WAIT_SIGNAL (14)
2955
======================================================================
3303
======================================================================
2956
============= Function 68, subfunction 16 - load driver. =============
3304
============= Function 68, subfunction 16 - load driver. =============
2957
======================================================================
3305
======================================================================
2958
Parameters:
3306
Parameters:
2959
  * eax = 68 - function number
3307
  * eax = 68 - function number
2960
  * ebx = 16 - subfunction number
3308
  * ebx = 16 - subfunction number
2961
  * ecx = pointer to ASCIIZ-string with driver name
3309
  * ecx = pointer to ASCIIZ-string with driver name
2962
Returned value:
3310
Returned value:
2963
  * eax = 0 - failed
3311
  * eax = 0 - failed
2964
  * otherwise eax = driver handle
3312
  * otherwise eax = driver handle
2965
Remarks:
3313
Remarks:
2966
  * If the driver was not loaded yet, it is loaded;
3314
  * If the driver was not loaded yet, it is loaded;
2967
    if the driver was loaded yet, nothing happens.
3315
    if the driver was loaded yet, nothing happens.
2968
  * Driver name is case-sensitive.
3316
  * Driver name is case-sensitive.
2969
    Maximum length of the name is 16 characters, including
3317
    Maximum length of the name is 16 characters, including
2970
    terminating null character, the rest is ignored.
3318
    terminating null character, the rest is ignored.
2971
  * Driver ABC is loaded from file /rd/1/drivers/ABC.obj.
3319
  * Driver ABC is loaded from file /rd/1/drivers/ABC.obj.
-
 
3320
 
-
 
3321
---------------------- Constants for registers: ----------------------
-
 
3322
  eax - SF_SYS_MISC (68)
2972
 
3323
  ebx - SSF_LOAD_DRIVER (16)
2973
======================================================================
3324
======================================================================
2974
============ Function 68, subfunction 17 - driver control. ===========
3325
============ Function 68, subfunction 17 - driver control. ===========
2975
======================================================================
3326
======================================================================
2976
Parameters:
3327
Parameters:
2977
  * eax = 68 - function number
3328
  * eax = 68 - function number
2978
  * ebx = 17 - subfunction number
3329
  * ebx = 17 - subfunction number
2979
  * ecx = pointer to the control structure:
3330
  * ecx = pointer to the control structure:
2980
    * +0: dword: handle of driver
3331
    * +0: dword: handle of driver
2981
    * +4: dword: code of driver function
3332
    * +4: dword: code of driver function
2982
    * +8: dword: pointer to input data
3333
    * +8: dword: pointer to input data
2983
    * +12 = +0xC: dword: size of input data
3334
    * +12 = +0xC: dword: size of input data
2984
    * +16 = +0x10: dword: pointer to output data
3335
    * +16 = +0x10: dword: pointer to output data
2985
    * +20 = +0x14: dword: size of output data
3336
    * +20 = +0x14: dword: size of output data
2986
Returned value:
3337
Returned value:
2987
  * eax = determined by driver
3338
  * eax = determined by driver
2988
Remarks:
3339
Remarks:
2989
  * Function codes and the structure of input/output data
3340
  * Function codes and the structure of input/output data
2990
    are defined by driver.
3341
    are defined by driver.
2991
  * Previously one must obtain driver handle by subfunction 16.
3342
  * Previously one must obtain driver handle by subfunction 16.
-
 
3343
 
-
 
3344
---------------------- Constants for registers: ----------------------
-
 
3345
  eax - SF_SYS_MISC (68)
2992
 
3346
  ebx - SSF_CONTROL_DRIVER (17)
2993
======================================================================
3347
======================================================================
2994
=============== Function 68, subfunction 19 - load DLL. ==============
3348
=============== Function 68, subfunction 19 - load DLL. ==============
2995
======================================================================
3349
======================================================================
2996
Parameters:
3350
Parameters:
2997
  * eax = 68 - function number
3351
  * eax = 68 - function number
2998
  * ebx = 19 - subfunction number
3352
  * ebx = 19 - subfunction number
2999
  * ecx = pointer to ASCIIZ-string with the full path to DLL
3353
  * ecx = pointer to ASCIIZ-string with the full path to DLL
3000
Returned value:
3354
Returned value:
3001
  * eax = 0 - failed
3355
  * eax = 0 - failed
3002
  * otherwise eax = pointer to DLL export table
3356
  * otherwise eax = pointer to DLL export table
3003
Remarks:
3357
Remarks:
3004
  * Export table is an array of structures of 2 dword's, terminated
3358
  * Export table is an array of structures of 2 dword's, terminated
3005
    by zero. The first dword in structure points to function name,
3359
    by zero. The first dword in structure points to function name,
3006
    the second dword contains address of function.
3360
    the second dword contains address of function.
-
 
3361
 
-
 
3362
---------------------- Constants for registers: ----------------------
-
 
3363
  eax - SF_SYS_MISC (68)
3007
 
3364
  ebx - SSF_LOAD_DLL (19)
3008
======================================================================
3365
======================================================================
3009
======= Function 68, subfunction 20 - reallocate memory block. =======
3366
======= Function 68, subfunction 20 - reallocate memory block. =======
3010
======================================================================
3367
======================================================================
3011
Parameters:
3368
Parameters:
3012
  * eax = 68 - function number
3369
  * eax = 68 - function number
3013
  * ebx = 20 - subfunction number
3370
  * ebx = 20 - subfunction number
3014
  * ecx = new size in bytes
3371
  * ecx = new size in bytes
3015
  * edx = pointer to already allocated block
3372
  * edx = pointer to already allocated block
3016
Returned value:
3373
Returned value:
3017
  * eax = pointer to the reallocated block, 0 = error
3374
  * eax = pointer to the reallocated block, 0 = error
3018
Remarks:
3375
Remarks:
3019
  * Before this call one must initialize process heap by call to
3376
  * Before this call one must initialize process heap by call to
3020
    subfunction 11.
3377
    subfunction 11.
3021
  * The function allocates an integer number of pages (4 Kb) in such
3378
  * The function allocates an integer number of pages (4 Kb) in such
3022
    way that the real size of allocated block is more than or equal to
3379
    way that the real size of allocated block is more than or equal to
3023
    requested size.
3380
    requested size.
3024
  * If edx=0, the function call is equivalent to memory allocation
3381
  * If edx=0, the function call is equivalent to memory allocation
3025
    with subfunction 12. Otherwise the block at edx
3382
    with subfunction 12. Otherwise the block at edx
3026
    must be allocated earlier with subfunction 12 or this subfunction.
3383
    must be allocated earlier with subfunction 12 or this subfunction.
3027
  * If ecx=0, the function frees memory block at edx and returns 0.
3384
  * If ecx=0, the function frees memory block at edx and returns 0.
3028
  * The contents of the block are unchanged up to the shorter of
3385
  * The contents of the block are unchanged up to the shorter of
3029
    the new and old sizes.
3386
    the new and old sizes.
-
 
3387
 
-
 
3388
---------------------- Constants for registers: ----------------------
-
 
3389
  eax - SF_SYS_MISC (68)
3030
 
3390
  ebx - SSF_MEM_REALLOC (20)
3031
======================================================================
3391
======================================================================
3032
=========== Function 68, subfunction 21 - load driver PE. ============
3392
=========== Function 68, subfunction 21 - load driver PE. ============
3033
======================================================================
3393
======================================================================
3034
Parameters:
3394
Parameters:
3035
  * eax = 68 - function number
3395
  * eax = 68 - function number
3036
  * ebx = 21 - subfunction number
3396
  * ebx = 21 - subfunction number
3037
  * ecx = pointer to ASCIIZ-string with driver name
3397
  * ecx = pointer to ASCIIZ-string with driver name
3038
  * edx = pointer to command line
3398
  * edx = pointer to command line
3039
Returned value:
3399
Returned value:
3040
  * eax = 0 - failed
3400
  * eax = 0 - failed
3041
  * otherwise eax = driver handle
3401
  * otherwise eax = driver handle
3042
Remarks:
3402
Remarks:
3043
  * If the driver was not loaded yet, it is loaded;
3403
  * If the driver was not loaded yet, it is loaded;
3044
    if the driver was loaded yet, nothing happens.
3404
    if the driver was loaded yet, nothing happens.
-
 
3405
 
-
 
3406
---------------------- Constants for registers: ----------------------
-
 
3407
  eax - SF_SYS_MISC (68)
3045
 
3408
  ebx - SSF_LOAD_DRIVER_PE (21)
3046
======================================================================
3409
======================================================================
3047
======== Function 68, subfunction 22 - open named memory area. =======
3410
======== Function 68, subfunction 22 - open named memory area. =======
3048
======================================================================
3411
======================================================================
3049
Parameters:
3412
Parameters:
3050
  * eax = 68 - function number
3413
  * eax = 68 - function number
3051
  * ebx = 22 - subfunction number
3414
  * ebx = 22 - subfunction number
3052
  * ecx = area name. Maximum of 31 characters with terminating zero
3415
  * ecx = area name. Maximum of 31 characters with terminating zero
3053
  * edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
3416
  * edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
3054
  * esi = flags for open and access:
3417
  * esi = flags for open and access:
3055
    * SHM_OPEN        = 0x00 - open existing memory area. If an area
3418
    * SHM_OPEN        = 0x00 - open existing memory area. If an area
3056
                          with such name does not exist, the function
3419
                          with such name does not exist, the function
3057
                          will return error code 5.
3420
                          will return error code 5.
3058
    * SHM_OPEN_ALWAYS = 0x04 - open existing or create new
3421
    * SHM_OPEN_ALWAYS = 0x04 - open existing or create new
3059
                          memory area.
3422
                          memory area.
3060
    * SHM_CREATE      = 0x08 - create new memory area. If an area
3423
    * SHM_CREATE      = 0x08 - create new memory area. If an area
3061
                          with such name already exists, the function
3424
                          with such name already exists, the function
3062
                          will return error code 10.
3425
                          will return error code 10.
3063
    * SHM_READ        = 0x00 - only read access
3426
    * SHM_READ        = 0x00 - only read access
3064
    * SHM_WRITE       = 0x01 - read and write access
3427
    * SHM_WRITE       = 0x01 - read and write access
3065
Returned value:
3428
Returned value:
3066
  * eax = pointer to memory area, 0 if error has occured
3429
  * eax = pointer to memory area, 0 if error has occured
3067
  * if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS):
3430
  * if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS):
3068
    edx = 0 - success, otherwise - error code
3431
    edx = 0 - success, otherwise - error code
3069
  * if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS):
3432
  * if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS):
3070
    edx = error code (if eax=0) or area size in bytes
3433
    edx = error code (if eax=0) or area size in bytes
3071
Error codes:
3434
Error codes:
3072
  * E_NOTFOUND = 5
3435
  * E_NOTFOUND = 5
3073
  * E_ACCESS = 10
3436
  * E_ACCESS = 10
3074
  * E_NOMEM = 30
3437
  * E_NOMEM = 30
3075
  * E_PARAM = 33
3438
  * E_PARAM = 33
3076
Remarks:
3439
Remarks:
3077
  * Before this call one must initialize process heap by call to
3440
  * Before this call one must initialize process heap by call to
3078
    subfunction 11.
3441
    subfunction 11.
3079
  * If a new area is created, access flags set maximal rights
3442
  * If a new area is created, access flags set maximal rights
3080
    for other processes. An attempt from other process to open
3443
    for other processes. An attempt from other process to open
3081
    with denied rights will fail with error code E_ACCESS.
3444
    with denied rights will fail with error code E_ACCESS.
3082
  * The process which has created an area always has write access.
3445
  * The process which has created an area always has write access.
-
 
3446
 
-
 
3447
---------------------- Constants for registers: ----------------------
-
 
3448
  eax - SF_SYS_MISC (68)
3083
 
3449
  ebx - SSF_MEM_OPEN (22)
3084
======================================================================
3450
======================================================================
3085
======= Function 68, subfunction 23 - close named memory area. =======
3451
======= Function 68, subfunction 23 - close named memory area. =======
3086
======================================================================
3452
======================================================================
3087
Parameters:
3453
Parameters:
3088
  * eax = 68 - function number
3454
  * eax = 68 - function number
3089
  * ebx = 23 - subfunction number
3455
  * ebx = 23 - subfunction number
3090
  * ecx = area name. Maximum of 31 characters with terminating zero
3456
  * ecx = area name. Maximum of 31 characters with terminating zero
3091
Returned value:
3457
Returned value:
3092
  * eax destroyed
3458
  * eax destroyed
3093
Remarks:
3459
Remarks:
3094
  * A memory area is physically freed (with deleting all data and
3460
  * A memory area is physically freed (with deleting all data and
3095
    freeing physical memory), when all threads which have opened
3461
    freeing physical memory), when all threads which have opened
3096
    this area will close it.
3462
    this area will close it.
3097
  * When thread is terminating, all opened by it areas are closed.
3463
  * When thread is terminating, all opened by it areas are closed.
-
 
3464
 
-
 
3465
---------------------- Constants for registers: ----------------------
-
 
3466
  eax - SF_SYS_MISC (68)
3098
 
3467
  ebx - SSF_MEM_CLOSE (23)
3099
======================================================================
3468
======================================================================
3100
======== Function 68, subfunction 24 - set exception handler. ========
3469
======== Function 68, subfunction 24 - set exception handler. ========
3101
======================================================================
3470
======================================================================
3102
Parameters:
3471
Parameters:
3103
  * eax = 68 - function number
3472
  * eax = 68 - function number
3104
  * ebx = 24 - subfunction number
3473
  * ebx = 24 - subfunction number
3105
  * ecx = address of the new exception handler
3474
  * ecx = address of the new exception handler
3106
  * edx = the mask of handled exceptions
3475
  * edx = the mask of handled exceptions
3107
Returned value:
3476
Returned value:
3108
  * eax = address of the old exception handler (0, if it was not set)
3477
  * eax = address of the old exception handler (0, if it was not set)
3109
  * ebx = the old mask of handled exceptions
3478
  * ebx = the old mask of handled exceptions
3110
Remarks:
3479
Remarks:
3111
  * Bit number in mask of exceptions corresponds to exception number
3480
  * Bit number in mask of exceptions corresponds to exception number
3112
    in CPU-specification (Intel-PC). For example, FPU exceptions have
3481
    in CPU-specification (Intel-PC). For example, FPU exceptions have
3113
    number 16 (#MF), and SSE exceptions - 19 (#XF).
3482
    number 16 (#MF), and SSE exceptions - 19 (#XF).
3114
  * The current implementation ignores the inquiry for hook of 7
3483
  * The current implementation ignores the inquiry for hook of 7
3115
    exception - the system handles #NM by its own.
3484
    exception - the system handles #NM by its own.
3116
  * The exception handler is called with exception number as first
3485
  * The exception handler is called with exception number as first
3117
    (and only) stack parameter. So, correct exit from the handler is
3486
    (and only) stack parameter. So, correct exit from the handler is
3118
    RET 4. It returns to the instruction, that caused the exception,
3487
    RET 4. It returns to the instruction, that caused the exception,
3119
    for faults, and to the next instruction for traps (see
3488
    for faults, and to the next instruction for traps (see
3120
    classification of exceptions in CPU specification).
3489
    classification of exceptions in CPU specification).
3121
  * When user handler receives control, the corresponding bit in
3490
  * When user handler receives control, the corresponding bit in
3122
    the exception mask is cleared. Raising this exception
3491
    the exception mask is cleared. Raising this exception
3123
    in consequence leads to default handling, that is,
3492
    in consequence leads to default handling, that is,
3124
    terminating the application in absence of debugger or
3493
    terminating the application in absence of debugger or
3125
    suspend with notification of debugger otherwise.
3494
    suspend with notification of debugger otherwise.
3126
  * After user handler completes critical operations, it can set
3495
  * After user handler completes critical operations, it can set
3127
    the corresponding bit in the exception mask with subfunction 25.
3496
    the corresponding bit in the exception mask with subfunction 25.
3128
    Also user handler is responsible for clearing exceptions flags in
3497
    Also user handler is responsible for clearing exceptions flags in
3129
    FPU and/or SSE.
3498
    FPU and/or SSE.
-
 
3499
 
-
 
3500
---------------------- Constants for registers: ----------------------
-
 
3501
  eax - SF_SYS_MISC (68)
3130
 
3502
  ebx - SSF_SET_EXCEPTION_HANDLER (24)
3131
======================================================================
3503
======================================================================
3132
======== Function 68, subfunction 25 - set exception activity ========
3504
======== Function 68, subfunction 25 - set exception activity ========
3133
======================================================================
3505
======================================================================
3134
Parameters:
3506
Parameters:
3135
  * eax = 68 - function number
3507
  * eax = 68 - function number
3136
  * ebx = 25 - subfunction number
3508
  * ebx = 25 - subfunction number
3137
  * ecx = signal number
3509
  * ecx = signal number
3138
  * edx = value of activity (0/1)
3510
  * edx = value of activity (0/1)
3139
Returned value:
3511
Returned value:
3140
  * eax = -1 - invalid signal number
3512
  * eax = -1 - invalid signal number
3141
  * otherwise eax = old value of activity for this signal (0/1)
3513
  * otherwise eax = old value of activity for this signal (0/1)
3142
Remarks:
3514
Remarks:
3143
  * In current implementation only mask for user excepton handler,
3515
  * In current implementation only mask for user excepton handler,
3144
    which has been previously set by subfunction 24,
3516
    which has been previously set by subfunction 24,
3145
    is changed. Signal number corresponds to exception number.
3517
    is changed. Signal number corresponds to exception number.
-
 
3518
 
-
 
3519
---------------------- Constants for registers: ----------------------
-
 
3520
  eax - SF_SYS_MISC (68)
3146
 
3521
  ebx - SSF_SET_EXCEPTION_STATE (25)
3147
======================================================================
3522
======================================================================
3148
====== Function 68, subfunction 26 - release memory pages ============
3523
====== Function 68, subfunction 26 - release memory pages ============
3149
======================================================================
3524
======================================================================
3150
Parameters:
3525
Parameters:
3151
  * eax = 68 - function number
3526
  * eax = 68 - function number
3152
  * ebx = 26 - subfunction number
3527
  * ebx = 26 - subfunction number
3153
  * ecx = pointer to the memory block, allocated by subfunction 12
3528
  * ecx = pointer to the memory block, allocated by subfunction 12
3154
  * edx = offset from the block beginnings
3529
  * edx = offset from the block beginnings
3155
  * esi = the size of the region of memory to release, in bytes
3530
  * esi = the size of the region of memory to release, in bytes
3156
Remarks:
3531
Remarks:
3157
  * function release range of pages from ecx+edx to ecx+edx+esi
3532
  * function release range of pages from ecx+edx to ecx+edx+esi
3158
    and set virtual memory into reserved state.
3533
    and set virtual memory into reserved state.
-
 
3534
 
-
 
3535
---------------------- Constants for registers: ----------------------
-
 
3536
  eax - SF_SYS_MISC (68)
3159
 
3537
  ebx - SSF_MEM_FREE_EXT (26)
3160
======================================================================
3538
======================================================================
3161
========== Function 68, subfunction 27 - load file ===================
3539
========== Function 68, subfunction 27 - load file ===================
3162
======================================================================
3540
======================================================================
3163
Parameters:
3541
Parameters:
3164
  * eax = 68 - function number
3542
  * eax = 68 - function number
3165
  * ebx = 27 - subfunction number
3543
  * ebx = 27 - subfunction number
3166
  * ecx = pointer to ASCIIZ-string with the filename
3544
  * ecx = pointer to ASCIIZ-string with the filename
3167
Returned value:
3545
Returned value:
3168
  * eax = pointer to the loaded file, or zero
3546
  * eax = pointer to the loaded file, or zero
3169
  * edx = size of the loaded file, or zero
3547
  * edx = size of the loaded file, or zero
3170
Remarks:
3548
Remarks:
3171
  * function loads file and unpacks, if necessary
3549
  * function loads file and unpacks, if necessary
-
 
3550
 
-
 
3551
---------------------- Constants for registers: ----------------------
-
 
3552
  eax - SF_SYS_MISC (68)
3172
 
3553
  ebx - SSF_LOAD_FILE (27)
3173
======================================================================
3554
======================================================================
3174
====================== Function 69 - debugging. ======================
3555
====================== Function 69 - debugging. ======================
3175
======================================================================
3556
======================================================================
3176
A process can load other process as debugged by set of corresponding
3557
A process can load other process as debugged by set of corresponding
3177
bit by call to subfunction 7 of function 70.
3558
bit by call to subfunction 7 of function 70.
3178
A process can have only one debugger; one process can debug some
3559
A process can have only one debugger; one process can debug some
3179
others. The system notifies debugger on events occuring with
3560
others. The system notifies debugger on events occuring with
3180
debugged process. Messages are written to the buffer defined by
3561
debugged process. Messages are written to the buffer defined by
3181
subfunction 0.
3562
subfunction 0.
3182
Format of a message:
3563
Format of a message:
3183
  * +0: dword: message code
3564
  * +0: dword: message code
3184
  * +4: dword: PID of debugged process
3565
  * +4: dword: PID of debugged process
3185
  * +8: there can be additional data depending on message code
3566
  * +8: there can be additional data depending on message code
3186
Message codes:
3567
Message codes:
3187
  * 1 = exception
3568
  * 1 = exception
3188
    * in addition dword-number of the exception is given
3569
    * in addition dword-number of the exception is given
3189
    * process is suspended
3570
    * process is suspended
3190
  * 2 = process has terminated
3571
  * 2 = process has terminated
3191
    * comes at any termination: both through the system function -1,
3572
    * comes at any termination: both through the system function -1,
3192
      and at "murder" by any other process (including debugger itself)
3573
      and at "murder" by any other process (including debugger itself)
3193
  * 3 = debug exception int 1 = #DB
3574
  * 3 = debug exception int 1 = #DB
3194
    * in addition dword-image of the register DR6 is given:
3575
    * in addition dword-image of the register DR6 is given:
3195
      * bits 0-3: condition of the corresponding breakpoint (set by
3576
      * bits 0-3: condition of the corresponding breakpoint (set by
3196
        subfunction 9) is satisfied
3577
        subfunction 9) is satisfied
3197
      * bit 14: exception has occured because of the trace mode
3578
      * bit 14: exception has occured because of the trace mode
3198
        (flag TF is set TF)
3579
        (flag TF is set TF)
3199
    * process is suspended
3580
    * process is suspended
3200
When debugger terminates, all debugged processes are killed.
3581
When debugger terminates, all debugged processes are killed.
3201
If debugger does not want this, it must previously detach by
3582
If debugger does not want this, it must previously detach by
3202
subfunction 3.
3583
subfunction 3.
3203
 
3584
 
3204
All subfunctions are applicable only to processes/threads started
3585
All subfunctions are applicable only to processes/threads started
3205
from the current by function 70 with set debugging flag.
3586
from the current by function 70 with set debugging flag.
3206
Debugging of multithreaded programs is not supported yet.
3587
Debugging of multithreaded programs is not supported yet.
3207
The full list of subfunctions:
3588
The full list of subfunctions:
3208
  * subfunction 0 - define data area for debug messages
3589
  * subfunction 0 - define data area for debug messages
3209
  * subfunction 1 - get contents of registers of debugged thread
3590
  * subfunction 1 - get contents of registers of debugged thread
3210
  * subfunction 2 - set contents of registers of debugged thread
3591
  * subfunction 2 - set contents of registers of debugged thread
3211
  * subfunction 3 - detach from debugged process
3592
  * subfunction 3 - detach from debugged process
3212
  * subfunction 4 - suspend debugged thread
3593
  * subfunction 4 - suspend debugged thread
3213
  * subfunction 5 - resume debugged thread
3594
  * subfunction 5 - resume debugged thread
3214
  * subfunction 6 - read from the memory of debugged process
3595
  * subfunction 6 - read from the memory of debugged process
3215
  * subfunction 7 - write to the memory of debugged process
3596
  * subfunction 7 - write to the memory of debugged process
3216
  * subfunction 8 - terminate debugged thread
3597
  * subfunction 8 - terminate debugged thread
3217
  * subfunction 9 - set/clear hardware breakpoint
3598
  * subfunction 9 - set/clear hardware breakpoint
-
 
3599
 
-
 
3600
---------------------- Constants for registers: ----------------------
-
 
3601
  eax - SF_DEBUG (69)
-
 
3602
  ebx - SSF_SET_MESSAGE_AREA (0), SSF_GET_REGISTERS (1),
-
 
3603
    SSF_SET_REGISTERS (2), SSF_DETACH (3), SSF_SUSPEND (4),
-
 
3604
    SSF_RESUME (5), SSF_READ_MEMORY (6), SSF_WRITE_MEMORY (7),
3218
 
3605
    SSF_TERMINATE (8), SSF_DEFINE_BREAKPOINT (9)
3219
======================================================================
3606
======================================================================
3220
= Function 69, subfunction 0 - define data area fror debug messages. =
3607
= Function 69, subfunction 0 - define data area fror debug messages. =
3221
======================================================================
3608
======================================================================
3222
Parameters:
3609
Parameters:
3223
  * eax = 69 - function number
3610
  * eax = 69 - function number
3224
  * ebx = 0 - subfunction number
3611
  * ebx = 0 - subfunction number
3225
  * ecx = pointer
3612
  * ecx = pointer
3226
Format of data area:
3613
Format of data area:
3227
  * +0: dword: N = buffer size (not including this header)
3614
  * +0: dword: N = buffer size (not including this header)
3228
  * +4: dword: occupied place
3615
  * +4: dword: occupied place
3229
  * +8: N*byte: buffer
3616
  * +8: N*byte: buffer
3230
Returned value:
3617
Returned value:
3231
  * function does not return value
3618
  * function does not return value
3232
Remarks:
3619
Remarks:
3233
  * If the size field is negative, the buffer is considered locked
3620
  * If the size field is negative, the buffer is considered locked
3234
    and at arrival of new message the system will wait.
3621
    and at arrival of new message the system will wait.
3235
    For synchronization frame all work with the buffer by operations
3622
    For synchronization frame all work with the buffer by operations
3236
    lock/unlock
3623
    lock/unlock
3237
        neg     [bufsize]
3624
        neg     [bufsize]
3238
  * Data in the buffer are considered as array of items with variable
3625
  * Data in the buffer are considered as array of items with variable
3239
    length - messages. Format of a message is explained in
3626
    length - messages. Format of a message is explained in
3240
    general description.
3627
    general description.
-
 
3628
 
-
 
3629
---------------------- Constants for registers: ----------------------
-
 
3630
  eax - SF_DEBUG (69)
3241
 
3631
  ebx - SSF_SET_MESSAGE_AREA (0)
3242
======================================================================
3632
======================================================================
3243
===================== Function 69, subfunction 1 =====================
3633
===================== Function 69, subfunction 1 =====================
3244
============ Get contents of registers of debugged thread. ===========
3634
============ Get contents of registers of debugged thread. ===========
3245
======================================================================
3635
======================================================================
3246
Parameters:
3636
Parameters:
3247
  * eax = 69 - function number
3637
  * eax = 69 - function number
3248
  * ebx = 1 - subfunction number
3638
  * ebx = 1 - subfunction number
3249
  * ecx = thread identifier
3639
  * ecx = thread identifier
3250
  * edx = size of context structure, must be 0x28=40 bytes
3640
  * edx = size of context structure, must be 0x28=40 bytes
3251
  * esi = pointer to context structure
3641
  * esi = pointer to context structure
3252
Returned value:
3642
Returned value:
3253
  * function does not return value
3643
  * function does not return value
3254
Format of context structure: (FPU is not supported yet)
3644
Format of context structure: (FPU is not supported yet)
3255
  * +0: dword: eip
3645
  * +0: dword: eip
3256
  * +4: dword: eflags
3646
  * +4: dword: eflags
3257
  * +8: dword: eax
3647
  * +8: dword: eax
3258
  * +12 = +0xC: dword: ecx
3648
  * +12 = +0xC: dword: ecx
3259
  * +16 = +0x10: dword: edx
3649
  * +16 = +0x10: dword: edx
3260
  * +20 = +0x14: dword: ebx
3650
  * +20 = +0x14: dword: ebx
3261
  * +24 = +0x18: dword: esp
3651
  * +24 = +0x18: dword: esp
3262
  * +28 = +0x1C: dword: ebp
3652
  * +28 = +0x1C: dword: ebp
3263
  * +32 = +0x20: dword: esi
3653
  * +32 = +0x20: dword: esi
3264
  * +36 = +0x24: dword: edi
3654
  * +36 = +0x24: dword: edi
3265
Remarks:
3655
Remarks:
3266
  * If the thread executes code of ring-0, the function returns
3656
  * If the thread executes code of ring-0, the function returns
3267
    contents of registers of ring-3.
3657
    contents of registers of ring-3.
3268
  * Process must be loaded for debugging (as is shown in
3658
  * Process must be loaded for debugging (as is shown in
3269
    general description).
3659
    general description).
-
 
3660
 
-
 
3661
---------------------- Constants for registers: ----------------------
-
 
3662
  eax - SF_DEBUG (69)
3270
 
3663
  ebx - SSF_GET_REGISTERS (1)
3271
======================================================================
3664
======================================================================
3272
===================== Function 69, subfunction 2 =====================
3665
===================== Function 69, subfunction 2 =====================
3273
============ Set contents of registers of debugged thread. ===========
3666
============ Set contents of registers of debugged thread. ===========
3274
======================================================================
3667
======================================================================
3275
Parameters:
3668
Parameters:
3276
  * eax = 69 - function number
3669
  * eax = 69 - function number
3277
  * ebx = 2 - subfunction number
3670
  * ebx = 2 - subfunction number
3278
  * ecx = thread identifier
3671
  * ecx = thread identifier
3279
  * edx = size of context structure, must be 0x28=40 bytes
3672
  * edx = size of context structure, must be 0x28=40 bytes
3280
Returned value:
3673
Returned value:
3281
  * function does not return value
3674
  * function does not return value
3282
Format of context structure is shown in the description of
3675
Format of context structure is shown in the description of
3283
subfunction 1.
3676
subfunction 1.
3284
Remarks:
3677
Remarks:
3285
  * If the thread executes code of ring-0, the function returns
3678
  * If the thread executes code of ring-0, the function returns
3286
    contents of registers of ring-3.
3679
    contents of registers of ring-3.
3287
  * Process must be loaded for debugging (as is shown in
3680
  * Process must be loaded for debugging (as is shown in
3288
    general description).
3681
    general description).
-
 
3682
 
-
 
3683
---------------------- Constants for registers: ----------------------
-
 
3684
  eax - SF_DEBUG (69)
3289
 
3685
  ebx - SSF_SET_REGISTERS (2)
3290
======================================================================
3686
======================================================================
3291
===== Function 69, subfunction 3 - detach from debugged process. =====
3687
===== Function 69, subfunction 3 - detach from debugged process. =====
3292
======================================================================
3688
======================================================================
3293
Parameters:
3689
Parameters:
3294
  * eax = 69 - function number
3690
  * eax = 69 - function number
3295
  * ebx = 3 - subfunction number
3691
  * ebx = 3 - subfunction number
3296
  * ecx = identifier
3692
  * ecx = identifier
3297
Returned value:
3693
Returned value:
3298
  * function does not return value
3694
  * function does not return value
3299
Remarks:
3695
Remarks:
3300
  * If the process was suspended, it resumes execution.
3696
  * If the process was suspended, it resumes execution.
-
 
3697
 
-
 
3698
---------------------- Constants for registers: ----------------------
-
 
3699
  eax - SF_DEBUG (69)
3301
 
3700
  ebx - SSF_DETACH (3)
3302
======================================================================
3701
======================================================================
3303
======== Function 69, subfunction 4 - suspend debugged thread. =======
3702
======== Function 69, subfunction 4 - suspend debugged thread. =======
3304
======================================================================
3703
======================================================================
3305
Parameters:
3704
Parameters:
3306
  * eax = 69 - function number
3705
  * eax = 69 - function number
3307
  * ebx = 4 - subfunction number
3706
  * ebx = 4 - subfunction number
3308
  * ecx = thread identifier
3707
  * ecx = thread identifier
3309
Returned value:
3708
Returned value:
3310
  * function does not return value
3709
  * function does not return value
3311
Remarks:
3710
Remarks:
3312
  * Process must be loaded for debugging (as is shown in
3711
  * Process must be loaded for debugging (as is shown in
3313
    general description).
3712
    general description).
-
 
3713
 
-
 
3714
---------------------- Constants for registers: ----------------------
-
 
3715
  eax - SF_DEBUG (69)
3314
 
3716
  ebx - SSF_SUSPEND (4)
3315
======================================================================
3717
======================================================================
3316
======== Function 69, subfunction 5 - resume debugged thread. ========
3718
======== Function 69, subfunction 5 - resume debugged thread. ========
3317
======================================================================
3719
======================================================================
3318
Parameters:
3720
Parameters:
3319
  * eax = 69 - function number
3721
  * eax = 69 - function number
3320
  * ebx = 5 - subfunction number
3722
  * ebx = 5 - subfunction number
3321
  * ecx = thread identifier
3723
  * ecx = thread identifier
3322
Returned value:
3724
Returned value:
3323
  * function does not return value
3725
  * function does not return value
3324
Remarks:
3726
Remarks:
3325
  * Process must be loaded for debugging (as is shown in
3727
  * Process must be loaded for debugging (as is shown in
3326
    general description).
3728
    general description).
-
 
3729
 
-
 
3730
---------------------- Constants for registers: ----------------------
-
 
3731
  eax - SF_DEBUG (69)
3327
 
3732
  ebx - SSF_RESUME (5)
3328
======================================================================
3733
======================================================================
3329
= Fucntion 69, subfunction 6 - read from memory of debugged process. =
3734
= Fucntion 69, subfunction 6 - read from memory of debugged process. =
3330
======================================================================
3735
======================================================================
3331
Parameters:
3736
Parameters:
3332
  * eax = 69 - function number
3737
  * eax = 69 - function number
3333
  * ebx = 6 - subfunction number
3738
  * ebx = 6 - subfunction number
3334
  * ecx = identifier
3739
  * ecx = identifier
3335
  * edx = number of bytes to read
3740
  * edx = number of bytes to read
3336
  * esi = address in the memory of debugged process
3741
  * esi = address in the memory of debugged process
3337
  * edi = pointer to buffer for data
3742
  * edi = pointer to buffer for data
3338
Returned value:
3743
Returned value:
3339
  * eax = -1 at an error (invalid PID or buffer)
3744
  * eax = -1 at an error (invalid PID or buffer)
3340
  * otherwise eax = number of read bytes (possibly, 0,
3745
  * otherwise eax = number of read bytes (possibly, 0,
3341
    if esi is too large)
3746
    if esi is too large)
3342
Remarks:
3747
Remarks:
3343
  * Process must be loaded for debugging (as is shown in
3748
  * Process must be loaded for debugging (as is shown in
3344
    general description).
3749
    general description).
-
 
3750
 
-
 
3751
---------------------- Constants for registers: ----------------------
-
 
3752
  eax - SF_DEBUG (69)
3345
 
3753
  ebx - SSF_READ_MEMORY (6)
3346
======================================================================
3754
======================================================================
3347
== Function 69, subfunction 7 - write to memory of debugged process. =
3755
== Function 69, subfunction 7 - write to memory of debugged process. =
3348
======================================================================
3756
======================================================================
3349
Parameters:
3757
Parameters:
3350
  * eax = 69 - function number
3758
  * eax = 69 - function number
3351
  * ebx = 7 - subfunction number
3759
  * ebx = 7 - subfunction number
3352
  * ecx = identifier
3760
  * ecx = identifier
3353
  * edx = number of bytes to write
3761
  * edx = number of bytes to write
3354
  * esi = address of memory in debugged process
3762
  * esi = address of memory in debugged process
3355
  * edi = pointer to data
3763
  * edi = pointer to data
3356
Returned value:
3764
Returned value:
3357
  * eax = -1 at an error (invalid PID or buffer)
3765
  * eax = -1 at an error (invalid PID or buffer)
3358
  * otherwise eax = number of written bytes (possibly, 0,
3766
  * otherwise eax = number of written bytes (possibly, 0,
3359
    if esi is too large)
3767
    if esi is too large)
3360
Remarks:
3768
Remarks:
3361
  * Process must be loaded for debugging (as is shown in
3769
  * Process must be loaded for debugging (as is shown in
3362
    general description).
3770
    general description).
-
 
3771
 
-
 
3772
---------------------- Constants for registers: ----------------------
-
 
3773
  eax - SF_DEBUG (69)
3363
 
3774
  ebx - SSF_WRITE_MEMORY (7)
3364
======================================================================
3775
======================================================================
3365
======= Function 69, subfunction 8 - terminate debugged thread. ======
3776
======= Function 69, subfunction 8 - terminate debugged thread. ======
3366
======================================================================
3777
======================================================================
3367
Parameters:
3778
Parameters:
3368
  * eax = 69 - function number
3779
  * eax = 69 - function number
3369
  * ebx = 8 - subfunction number
3780
  * ebx = 8 - subfunction number
3370
  * ecx = identifier
3781
  * ecx = identifier
3371
Returned value:
3782
Returned value:
3372
  * function does not return value
3783
  * function does not return value
3373
Remarks:
3784
Remarks:
3374
  * Process must be loaded for debugging (as is shown in
3785
  * Process must be loaded for debugging (as is shown in
3375
    general description).
3786
    general description).
3376
  * The function is similar to subfunction 2 of function 18
3787
  * The function is similar to subfunction 2 of function 18
3377
    with two differences: it requires first remark and
3788
    with two differences: it requires first remark and
3378
    accepts PID rather than slot number.
3789
    accepts PID rather than slot number.
-
 
3790
 
-
 
3791
---------------------- Constants for registers: ----------------------
-
 
3792
  eax - SF_DEBUG (69)
3379
 
3793
  ebx - SSF_TERMINATE (8)
3380
======================================================================
3794
======================================================================
3381
===== Function 69, subfunction 9 - set/clear hardware breakpoint. ====
3795
===== Function 69, subfunction 9 - set/clear hardware breakpoint. ====
3382
======================================================================
3796
======================================================================
3383
Parameters:
3797
Parameters:
3384
  * eax = 69 - function number
3798
  * eax = 69 - function number
3385
  * ebx = 9 - subfunction number
3799
  * ebx = 9 - subfunction number
3386
  * ecx = thread identifier
3800
  * ecx = thread identifier
3387
  * dl = index of breakpoint, from 0 to 3 inclusively
3801
  * dl = index of breakpoint, from 0 to 3 inclusively
3388
  * dh = flags:
3802
  * dh = flags:
3389
    * if high bit is cleared - set breakpoint:
3803
    * if high bit is cleared - set breakpoint:
3390
      * bits 0-1 - condition:
3804
      * bits 0-1 - condition:
3391
        * 00 = breakpoint on execution
3805
        * 00 = breakpoint on execution
3392
        * 01 = breakpoint on read
3806
        * 01 = breakpoint on read
3393
        * 11 = breakpoint on read/write
3807
        * 11 = breakpoint on read/write
3394
      * bits 2-3 - length; for breakpoints on exception it must be
3808
      * bits 2-3 - length; for breakpoints on exception it must be
3395
        00, otherwise one of
3809
        00, otherwise one of
3396
        * 00 = byte
3810
        * 00 = byte
3397
        * 01 = word
3811
        * 01 = word
3398
        * 11 = dword
3812
        * 11 = dword
3399
      * esi = breakpoint address; must be aligned according to
3813
      * esi = breakpoint address; must be aligned according to
3400
        the length (i.e. must be even for word breakpoints,
3814
        the length (i.e. must be even for word breakpoints,
3401
        divisible by 4 for dword)
3815
        divisible by 4 for dword)
3402
    * if high bit is set - clear breakpoint
3816
    * if high bit is set - clear breakpoint
3403
Returned value:
3817
Returned value:
3404
  * eax = 0 - success
3818
  * eax = 0 - success
3405
  * eax = 1 - error in the input data
3819
  * eax = 1 - error in the input data
3406
  * eax = 2 - (reserved, is never returned in the current
3820
  * eax = 2 - (reserved, is never returned in the current
3407
    implementation) a global breakpoint with that index is already set
3821
    implementation) a global breakpoint with that index is already set
3408
Remarks:
3822
Remarks:
3409
  * Process must be loaded for debugging (as is shown in
3823
  * Process must be loaded for debugging (as is shown in
3410
    general description).
3824
    general description).
3411
  * Hardware breakpoints are implemented through DRx-registers of
3825
  * Hardware breakpoints are implemented through DRx-registers of
3412
    the processor, all limitations results from this.
3826
    the processor, all limitations results from this.
3413
  * The function can reinstall the breakpoint, previously set
3827
  * The function can reinstall the breakpoint, previously set
3414
    by it (and it does not inform on this).
3828
    by it (and it does not inform on this).
3415
    Carry on the list of set breakpoints in the debugger.
3829
    Carry on the list of set breakpoints in the debugger.
3416
  * Breakpoints generate debug exception #DB, on which the system
3830
  * Breakpoints generate debug exception #DB, on which the system
3417
    notifies debugger.
3831
    notifies debugger.
3418
  * Breakpoints on write and read/write act after
3832
  * Breakpoints on write and read/write act after
3419
    execution of the caused it instruction.
3833
    execution of the caused it instruction.
-
 
3834
 
-
 
3835
---------------------- Constants for registers: ----------------------
-
 
3836
  eax - SF_DEBUG (69)
3420
 
3837
  ebx - SSF_DEFINE_BREAKPOINT (9)
3421
======================================================================
3838
======================================================================
3422
==== Function 70 - work with file system with long names support. ====
3839
==== Function 70 - work with file system with long names support. ====
3423
======================================================================
3840
======================================================================
3424
Parameters:
3841
Parameters:
3425
  * eax = 70
3842
  * eax = 70
3426
  * ebx = pointer to the information structure
3843
  * ebx = pointer to the information structure
3427
Returned value:
3844
Returned value:
3428
  * eax = 0 - success; otherwise file system error code
3845
  * eax = 0 - success; otherwise file system error code
3429
  * some subfunctions return value in other registers too
3846
  * some subfunctions return value in other registers too
3430
General format of the information structure:
3847
General format of the information structure:
3431
  * +0: dword: subfunction number
3848
  * +0: dword: subfunction number
3432
  * +4: dword: file offset
3849
  * +4: dword: file offset
3433
  * +8: dword: high dword of offset (must be 0) or flags field
3850
  * +8: dword: high dword of offset (must be 0) or flags field
3434
  * +12 = +0xC: dword: size
3851
  * +12 = +0xC: dword: size
3435
  * +16 = +0x10: dword: pointer to data
3852
  * +16 = +0x10: dword: pointer to data
3436
  * +20 = +0x14: n db: ASCIIZ-string with the filename
3853
  * +20 = +0x14: n db: ASCIIZ-string with the filename
3437
    or
3854
    or
3438
  * +20 = +0x14: db 0
3855
  * +20 = +0x14: db 0
3439
  * +21 = +0x15: dd pointer to ASCIIZ-string with the filename
3856
  * +21 = +0x15: dd pointer to ASCIIZ-string with the filename
3440
Specifications - in documentation on the appropriate subfunction.
3857
Specifications - in documentation on the appropriate subfunction.
3441
Filename is case-insensitive. Russian letters must be written in
3858
Filename is case-insensitive. Russian letters must be written in
3442
the encoding cp866 (DOS).
3859
the encoding cp866 (DOS).
3443
Format of filename:
3860
Format of filename:
3444
/base/number/dir1/dir2/.../dirn/file,
3861
/base/number/dir1/dir2/.../dirn/file,
3445
where /base/number identifies device, on which file is located:
3862
where /base/number identifies device, on which file is located:
3446
one of
3863
one of
3447
  * /RD/1 = /RAMDISK/1 to access ramdisk
3864
  * /RD/1 = /RAMDISK/1 to access ramdisk
3448
  * /FD/1 = /FLOPPYDISK/1 to access first floppy drive,
3865
  * /FD/1 = /FLOPPYDISK/1 to access first floppy drive,
3449
    /FD/2 = /FLOPPYDISK/2 to access second one
3866
    /FD/2 = /FLOPPYDISK/2 to access second one
3450
  * /HD0/x, /HD1/x, /HD2/x, /HD3/x to access accordingly to devices
3867
  * /HD0/x, /HD1/x, /HD2/x, /HD3/x to access accordingly to devices
3451
    IDE0 (Primary Master), IDE1 (Primary Slave),
3868
    IDE0 (Primary Master), IDE1 (Primary Slave),
3452
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
3869
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
3453
    x - partition number on the selected hard drive, varies from 1
3870
    x - partition number on the selected hard drive, varies from 1
3454
    to 255 (on each hard drive the indexing starts from 1)
3871
    to 255 (on each hard drive the indexing starts from 1)
3455
  * /CD0/1, /CD1/1, /CD2/1, /CD3/1 to access accordingly to
3872
  * /CD0/1, /CD1/1, /CD2/1, /CD3/1 to access accordingly to
3456
    CD on IDE0 (Primary Master), IDE1 (Primary Slave),
3873
    CD on IDE0 (Primary Master), IDE1 (Primary Slave),
3457
    IDE2 (Secondary Master), IDE3 (Secondary Slave)
3874
    IDE2 (Secondary Master), IDE3 (Secondary Slave)
3458
  * /SYS means system folder; with the usual boot (from floppy)
3875
  * /SYS means system folder; with the usual boot (from floppy)
3459
    is equivalent to /RD/1
3876
    is equivalent to /RD/1
3460
Examples:
3877
Examples:
3461
  * '/rd/1/kernel.asm',0
3878
  * '/rd/1/kernel.asm',0
3462
  * '/HD0/1/kernel.asm',0
3879
  * '/HD0/1/kernel.asm',0
3463
  * '/hd0/2/menuet/pics/tanzania.bmp',0
3880
  * '/hd0/2/menuet/pics/tanzania.bmp',0
3464
  * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
3881
  * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
3465
  * '/sys/MySuperApp.ini',0
3882
  * '/sys/MySuperApp.ini',0
3466
Also function supports relative names.  If the path begins not
3883
Also function supports relative names.  If the path begins not
3467
with '/', it is considered relative to a current folder. To get or
3884
with '/', it is considered relative to a current folder. To get or
3468
set a current folder, use the function 30.
3885
set a current folder, use the function 30.
3469
 
3886
 
3470
Available subfunctions:
3887
Available subfunctions:
3471
  * subfunction 0 - read file
3888
  * subfunction 0 - read file
3472
  * subfunction 1 - read folder
3889
  * subfunction 1 - read folder
3473
  * subfunction 2 - create/rewrite file
3890
  * subfunction 2 - create/rewrite file
3474
  * subfunction 3 - write to existing file
3891
  * subfunction 3 - write to existing file
3475
  * subfunction 4 - set file size
3892
  * subfunction 4 - set file size
3476
  * subfunction 5 - get attributes of file/folder
3893
  * subfunction 5 - get attributes of file/folder
3477
  * subfunction 6 - set attributes of file/folder
3894
  * subfunction 6 - set attributes of file/folder
3478
  * subfunction 7 - start application
3895
  * subfunction 7 - start application
3479
  * subfunction 8 - delete file/folder
3896
  * subfunction 8 - delete file/folder
3480
  * subfunction 9 - create folder
3897
  * subfunction 9 - create folder
3481
For CD-drives due to hardware limitations only subfunctions
3898
For CD-drives due to hardware limitations only subfunctions
3482
0,1,5 and 7 are available, other subfunctions return error
3899
0,1,5 and 7 are available, other subfunctions return error
3483
with code 2.
3900
with code 2.
3484
At the first call of subfunctions 0,1,5,7 to ATAPI devices
3901
At the first call of subfunctions 0,1,5,7 to ATAPI devices
3485
(CD and DVD) the manual control of tray is locked due to caching
3902
(CD and DVD) the manual control of tray is locked due to caching
3486
drive data. Unlocking is made when subfunction 4 of function 24
3903
drive data. Unlocking is made when subfunction 4 of function 24
3487
is called for corresponding device.
3904
is called for corresponding device.
-
 
3905
 
-
 
3906
---------------------- Constants for registers: ----------------------
-
 
3907
  eax - SF_FILE (70)
-
 
3908
 [ebx] - SSF_READ_FILE (0), SSF_READ_FOLDER (1), SSF_CREATE_FILE (2),
-
 
3909
    SSF_WRITE_FILE (3), SSF_SET_END (4), SSF_GET_INFO (5),
-
 
3910
    SSF_SET_INFO (6), SSF_START_APP (7), SSF_DELETE (8),
3488
 
3911
    SSF_CREATE_FOLDER (9)
3489
======================================================================
3912
======================================================================
3490
=== Function 70, subfunction 0 - read file with long names support. ==
3913
=== Function 70, subfunction 0 - read file with long names support. ==
3491
======================================================================
3914
======================================================================
3492
Parameters:
3915
Parameters:
3493
  * eax = 70 - function number
3916
  * eax = 70 - function number
3494
  * ebx = pointer to the information structure
3917
  * ebx = pointer to the information structure
3495
Format of the information structure:
3918
Format of the information structure:
3496
  * +0: dword: 0 = subfunction number
3919
  * +0: dword: 0 = subfunction number
3497
  * +4: dword: file offset (in bytes)
3920
  * +4: dword: file offset (in bytes)
3498
  * +8: dword: 0 (reserved for high dword of offset)
3921
  * +8: dword: 0 (reserved for high dword of offset)
3499
  * +12 = +0xC: dword: number of bytes to read
3922
  * +12 = +0xC: dword: number of bytes to read
3500
  * +16 = +0x10: dword: pointer to buffer for data
3923
  * +16 = +0x10: dword: pointer to buffer for data
3501
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3924
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3502
    given in the general description
3925
    given in the general description
3503
    or
3926
    or
3504
  * +20 = +0x14: db 0
3927
  * +20 = +0x14: db 0
3505
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3928
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3506
Returned value:
3929
Returned value:
3507
  * eax = 0 - success, otherwise file system error code
3930
  * eax = 0 - success, otherwise file system error code
3508
  * ebx = number of read bytes or -1=0xffffffff if file was not found
3931
  * ebx = number of read bytes or -1=0xffffffff if file was not found
3509
Remarks:
3932
Remarks:
3510
  * If file was ended before last requested block was read,
3933
  * If file was ended before last requested block was read,
3511
    the function will read as many as it can, and after that return
3934
    the function will read as many as it can, and after that return
3512
    eax=6 (EOF).
3935
    eax=6 (EOF).
3513
  * The function does not allow to read folder (returns eax=10,
3936
  * The function does not allow to read folder (returns eax=10,
3514
    access denied).
3937
    access denied).
-
 
3938
 
-
 
3939
---------------------- Constants for registers: ----------------------
-
 
3940
  eax - SF_FILE (70)
3515
 
3941
 [ebx] - SSF_READ_FILE (0)
3516
======================================================================
3942
======================================================================
3517
== Function 70, subfunction 1 - read folder with long names support. =
3943
== Function 70, subfunction 1 - read folder with long names support. =
3518
======================================================================
3944
======================================================================
3519
Parameters:
3945
Parameters:
3520
  * eax = 70 - function number
3946
  * eax = 70 - function number
3521
  * ebx = pointer to the information structure
3947
  * ebx = pointer to the information structure
3522
Format of the information structure:
3948
Format of the information structure:
3523
  * +0: dword: 1 = subfunction number
3949
  * +0: dword: 1 = subfunction number
3524
  * +4: dword: index of starting block (beginning from 0)
3950
  * +4: dword: index of starting block (beginning from 0)
3525
  * +8: dword: flags field:
3951
  * +8: dword: flags field:
3526
    * bit 0 (mask 1): in what format to return names,
3952
    * bit 0 (mask 1): in what format to return names,
3527
      0=ANSI, 1=UNICODE
3953
      0=ANSI, 1=UNICODE
3528
    * other bits are reserved and must be set to 0 for the future
3954
    * other bits are reserved and must be set to 0 for the future
3529
      compatibility
3955
      compatibility
3530
  * +12 = +0xC: dword: number of blocks to read
3956
  * +12 = +0xC: dword: number of blocks to read
3531
  * +16 = +0x10: dword: pointer to buffer for data, buffer size
3957
  * +16 = +0x10: dword: pointer to buffer for data, buffer size
3532
    must be not less than 32 + [+12]*560 bytes
3958
    must be not less than 32 + [+12]*560 bytes
3533
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
3959
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
3534
    given in the general description
3960
    given in the general description
3535
    or
3961
    or
3536
  * +20 = +0x14: db 0
3962
  * +20 = +0x14: db 0
3537
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3963
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3538
Returned value:
3964
Returned value:
3539
  * eax = 0 - success, otherwise file system error code
3965
  * eax = 0 - success, otherwise file system error code
3540
  * ebx = number of files, information on which was written to
3966
  * ebx = number of files, information on which was written to
3541
    the buffer, or -1=0xffffffff, if folder was not found
3967
    the buffer, or -1=0xffffffff, if folder was not found
3542
Structure of the buffer:
3968
Structure of the buffer:
3543
  * +0: 32*byte: header
3969
  * +0: 32*byte: header
3544
  * +32 = +0x20: n1*byte: block with information on file 1
3970
  * +32 = +0x20: n1*byte: block with information on file 1
3545
  * +32+n1: n2*byte: block with information on file 2
3971
  * +32+n1: n2*byte: block with information on file 2
3546
  * ...
3972
  * ...
3547
Structure of header:
3973
Structure of header:
3548
  * +0: dword: version of structure (current is 1)
3974
  * +0: dword: version of structure (current is 1)
3549
  * +4: dword: number of placed blocks; is not greater than requested
3975
  * +4: dword: number of placed blocks; is not greater than requested
3550
    in the field +12 of information structure; can be less, if
3976
    in the field +12 of information structure; can be less, if
3551
    there are no more files in folder (the same as in ebx)
3977
    there are no more files in folder (the same as in ebx)
3552
  * +8: dword: total number of files in folder
3978
  * +8: dword: total number of files in folder
3553
  * +12 = +0xC: 20*byte: reserved (zeroed)
3979
  * +12 = +0xC: 20*byte: reserved (zeroed)
3554
Structure of block of data for folder entry (BDFE):
3980
Structure of block of data for folder entry (BDFE):
3555
  * +0: dword: attributes of file:
3981
  * +0: dword: attributes of file:
3556
    * bit 0 (mask 1): file is read-only
3982
    * bit 0 (mask 1): file is read-only
3557
    * bit 1 (mask 2): file is hidden
3983
    * bit 1 (mask 2): file is hidden
3558
    * bit 2 (mask 4): file is system
3984
    * bit 2 (mask 4): file is system
3559
    * bit 3 (mask 8): this is not a file but volume label
3985
    * bit 3 (mask 8): this is not a file but volume label
3560
      (for one partition meets no more than once and
3986
      (for one partition meets no more than once and
3561
      only in root folder)
3987
      only in root folder)
3562
    * bit 4 (mask 0x10): this is a folder
3988
    * bit 4 (mask 0x10): this is a folder
3563
    * bit 5 (mask 0x20): file was not archived - many archivation
3989
    * bit 5 (mask 0x20): file was not archived - many archivation
3564
      programs have an option to archive only files with this bit set,
3990
      programs have an option to archive only files with this bit set,
3565
      and after archiving this bit is cleared - it can be useful
3991
      and after archiving this bit is cleared - it can be useful
3566
      for automatically creating of backup-archives as at writing
3992
      for automatically creating of backup-archives as at writing
3567
      this bit is usually set
3993
      this bit is usually set
3568
  * +4: byte: type of name data:
3994
  * +4: byte: type of name data:
3569
    (coincides with bit 0 of flags in the information structure)
3995
    (coincides with bit 0 of flags in the information structure)
3570
    * 0 = ASCII = 1-byte representation of each character
3996
    * 0 = ASCII = 1-byte representation of each character
3571
    * 1 = UNICODE = 2-byte representation of each character
3997
    * 1 = UNICODE = 2-byte representation of each character
3572
  * +5: 3*byte: reserved (zero)
3998
  * +5: 3*byte: reserved (zero)
3573
  * +8: 4*byte: time of file creation
3999
  * +8: 4*byte: time of file creation
3574
  * +12 = +0xC: 4*byte: date of file creation
4000
  * +12 = +0xC: 4*byte: date of file creation
3575
  * +16 = +0x10: 4*byte: time of last access (read or write)
4001
  * +16 = +0x10: 4*byte: time of last access (read or write)
3576
  * +20 = +0x14: 4*byte: date of last access
4002
  * +20 = +0x14: 4*byte: date of last access
3577
  * +24 = +0x18: 4*byte: time of last modification
4003
  * +24 = +0x18: 4*byte: time of last modification
3578
  * +28 = +0x1C: 4*byte: date of last modification
4004
  * +28 = +0x1C: 4*byte: date of last modification
3579
  * +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
4005
  * +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
3580
  * +40 = +0x28: name
4006
  * +40 = +0x28: name
3581
    * for ASCII format: maximum length is 263 characters
4007
    * for ASCII format: maximum length is 263 characters
3582
      (263 bytes), byte after the name has value 0
4008
      (263 bytes), byte after the name has value 0
3583
    * for UNICODE format: maximum length is 259 characters
4009
    * for UNICODE format: maximum length is 259 characters
3584
      (518 bytes), 2 bytes after the name have value 0
4010
      (518 bytes), 2 bytes after the name have value 0
3585
Time format:
4011
Time format:
3586
  * +0: byte: seconds
4012
  * +0: byte: seconds
3587
  * +1: byte: minutes
4013
  * +1: byte: minutes
3588
  * +2: byte: hours
4014
  * +2: byte: hours
3589
  * +3: byte: reserved (0)
4015
  * +3: byte: reserved (0)
3590
  * for example, 23.59.59 is written as (in hex) 3B 3B 17 00
4016
  * for example, 23.59.59 is written as (in hex) 3B 3B 17 00
3591
Date format:
4017
Date format:
3592
  * +0: byte: day
4018
  * +0: byte: day
3593
  * +1: byte: month
4019
  * +1: byte: month
3594
  * +2: word: year
4020
  * +2: word: year
3595
  * for example, 25.11.1979 is written as (in hex) 19 0B BB 07
4021
  * for example, 25.11.1979 is written as (in hex) 19 0B BB 07
3596
Remarks:
4022
Remarks:
3597
  * If BDFE contains ASCII name, the length of BDFE is 304 bytes,
4023
  * If BDFE contains ASCII name, the length of BDFE is 304 bytes,
3598
    if UNICODE name - 560 bytes. Value of length is aligned
4024
    if UNICODE name - 560 bytes. Value of length is aligned
3599
    on 16-byte bound (to accelerate processing in CPU cache).
4025
    on 16-byte bound (to accelerate processing in CPU cache).
3600
  * First character after a name is zero (ASCIIZ-string). The further
4026
  * First character after a name is zero (ASCIIZ-string). The further
3601
    data contain garbage.
4027
    data contain garbage.
3602
  * If files in folder were ended before requested number was read,
4028
  * If files in folder were ended before requested number was read,
3603
    the function will read as many as it can, and after that return
4029
    the function will read as many as it can, and after that return
3604
    eax=6 (EOF).
4030
    eax=6 (EOF).
3605
  * Any folder on the disk, except for root, contains two special
4031
  * Any folder on the disk, except for root, contains two special
3606
    entries "." and "..", identifying accordingly the folder itself
4032
    entries "." and "..", identifying accordingly the folder itself
3607
    and the parent folder.
4033
    and the parent folder.
3608
  * The function allows also to read virtual folders "/", "/rd",
4034
  * The function allows also to read virtual folders "/", "/rd",
3609
    "/fd", "/hd[n]", thus attributes of subfolders are set to 0x10,
4035
    "/fd", "/hd[n]", thus attributes of subfolders are set to 0x10,
3610
    and times and dates are zeroed. An alternative way to get the
4036
    and times and dates are zeroed. An alternative way to get the
3611
    equipment information - subfunction 11 of function 18.
4037
    equipment information - subfunction 11 of function 18.
-
 
4038
 
-
 
4039
---------------------- Constants for registers: ----------------------
-
 
4040
  eax - SF_FILE (70)
3612
 
4041
 [ebx] - SSF_READ_FOLDER (1)
3613
======================================================================
4042
======================================================================
3614
===================== Function 70, subfunction 2 =====================
4043
===================== Function 70, subfunction 2 =====================
3615
============ Create/rewrite file with long names support. ============
4044
============ Create/rewrite file with long names support. ============
3616
======================================================================
4045
======================================================================
3617
Parameters:
4046
Parameters:
3618
  * eax = 70 - function number
4047
  * eax = 70 - function number
3619
  * ebx = pointer to the information structure
4048
  * ebx = pointer to the information structure
3620
Format of the information structure:
4049
Format of the information structure:
3621
  * +0: dword: 2 = subfunction number
4050
  * +0: dword: 2 = subfunction number
3622
  * +4: dword: 0 (reserved)
4051
  * +4: dword: 0 (reserved)
3623
  * +8: dword: 0 (reserved)
4052
  * +8: dword: 0 (reserved)
3624
  * +12 = +0xC: dword: number of bytes to write
4053
  * +12 = +0xC: dword: number of bytes to write
3625
  * +16 = +0x10: dword: pointer to data
4054
  * +16 = +0x10: dword: pointer to data
3626
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4055
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3627
    given in the general description
4056
    given in the general description
3628
    or
4057
    or
3629
  * +20 = +0x14: db 0
4058
  * +20 = +0x14: db 0
3630
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4059
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3631
Returned value:
4060
Returned value:
3632
  * eax = 0 - success, otherwise file system error code
4061
  * eax = 0 - success, otherwise file system error code
3633
  * ebx = number of written bytes (possibly 0)
4062
  * ebx = number of written bytes (possibly 0)
3634
Remarks:
4063
Remarks:
3635
  * If a file with given name did not exist, it is created;
4064
  * If a file with given name did not exist, it is created;
3636
    if it existed, it is rewritten.
4065
    if it existed, it is rewritten.
3637
  * If there is not enough free space on disk, the function will
4066
  * If there is not enough free space on disk, the function will
3638
    write as many as can and then return error code 8.
4067
    write as many as can and then return error code 8.
3639
  * The function is not supported for CD (returns error code 2).
4068
  * The function is not supported for CD (returns error code 2).
-
 
4069
 
-
 
4070
---------------------- Constants for registers: ----------------------
-
 
4071
  eax - SF_FILE (70)
3640
 
4072
 [ebx] - SSF_CREATE_FILE (2)
3641
======================================================================
4073
======================================================================
3642
===================== Function 70, subfunction 3 =====================
4074
===================== Function 70, subfunction 3 =====================
3643
=========== Write to existing file with long names support. ==========
4075
=========== Write to existing file with long names support. ==========
3644
======================================================================
4076
======================================================================
3645
Parameters:
4077
Parameters:
3646
  * eax = 70 - function number
4078
  * eax = 70 - function number
3647
  * ebx = pointer to the information structure
4079
  * ebx = pointer to the information structure
3648
Format of the information structure:
4080
Format of the information structure:
3649
  * +0: dword: 3 = subfunction number
4081
  * +0: dword: 3 = subfunction number
3650
  * +4: dword: file offset (in bytes)
4082
  * +4: dword: file offset (in bytes)
3651
  * +8: dword: high dword of offset (must be 0 for FAT)
4083
  * +8: dword: high dword of offset (must be 0 for FAT)
3652
  * +12 = +0xC: dword: number of bytes to write
4084
  * +12 = +0xC: dword: number of bytes to write
3653
  * +16 = +0x10: dword: pointer to data
4085
  * +16 = +0x10: dword: pointer to data
3654
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4086
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3655
    given in the general description
4087
    given in the general description
3656
    or
4088
    or
3657
  * +20 = +0x14: db 0
4089
  * +20 = +0x14: db 0
3658
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4090
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3659
Returned value:
4091
Returned value:
3660
  * eax = 0 - success, otherwise file system error code
4092
  * eax = 0 - success, otherwise file system error code
3661
  * ebx = number of written bytes (possibly 0)
4093
  * ebx = number of written bytes (possibly 0)
3662
Remarks:
4094
Remarks:
3663
  * The file must already exist, otherwise function returns eax=5.
4095
  * The file must already exist, otherwise function returns eax=5.
3664
  * The only result of write 0 bytes is update in the file attributes
4096
  * The only result of write 0 bytes is update in the file attributes
3665
    date/time of modification and access to the current date/time.
4097
    date/time of modification and access to the current date/time.
3666
  * If beginning and/or ending position is greater than file size
4098
  * If beginning and/or ending position is greater than file size
3667
    (except for the previous case), the file is expanded to needed
4099
    (except for the previous case), the file is expanded to needed
3668
    size with zero characters.
4100
    size with zero characters.
3669
  * The function is not supported for CD (returns error code 2).
4101
  * The function is not supported for CD (returns error code 2).
-
 
4102
 
-
 
4103
---------------------- Constants for registers: ----------------------
-
 
4104
  eax - SF_FILE (70)
3670
 
4105
 [ebx] - SSF_WRITE_FILE (3)
3671
======================================================================
4106
======================================================================
3672
============ Function 70, subfunction 4 - set end of file. ===========
4107
============ Function 70, subfunction 4 - set end of file. ===========
3673
======================================================================
4108
======================================================================
3674
Parameters:
4109
Parameters:
3675
  * eax = 70 - function number
4110
  * eax = 70 - function number
3676
  * ebx = pointer to the information structure
4111
  * ebx = pointer to the information structure
3677
Format of the information structure:
4112
Format of the information structure:
3678
  * +0: dword: 4 = subfunction number
4113
  * +0: dword: 4 = subfunction number
3679
  * +4: dword: low dword of new file size
4114
  * +4: dword: low dword of new file size
3680
  * +8: dword: high dword of new file size (must be 0 for FAT)
4115
  * +8: dword: high dword of new file size (must be 0 for FAT)
3681
  * +12 = +0xC: dword: 0 (reserved)
4116
  * +12 = +0xC: dword: 0 (reserved)
3682
  * +16 = +0x10: dword: 0 (reserved)
4117
  * +16 = +0x10: dword: 0 (reserved)
3683
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4118
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3684
    given in the general description
4119
    given in the general description
3685
    or
4120
    or
3686
  * +20 = +0x14: db 0
4121
  * +20 = +0x14: db 0
3687
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4122
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3688
Returned value:
4123
Returned value:
3689
  * eax = 0 - success, otherwise file system error code
4124
  * eax = 0 - success, otherwise file system error code
3690
  * ebx destroyed
4125
  * ebx destroyed
3691
Remarks:
4126
Remarks:
3692
  * If the new file size is less than old one, file is truncated.
4127
  * If the new file size is less than old one, file is truncated.
3693
    If the new size is greater than old one, file is expanded with
4128
    If the new size is greater than old one, file is expanded with
3694
    characters with code 0. If the new size is equal to old one,
4129
    characters with code 0. If the new size is equal to old one,
3695
    the only result of call is set date/time of modification and
4130
    the only result of call is set date/time of modification and
3696
    access to the current date/time.
4131
    access to the current date/time.
3697
  * If there is not enough free space on disk for expansion, the
4132
  * If there is not enough free space on disk for expansion, the
3698
    function will expand to maximum possible size and then return
4133
    function will expand to maximum possible size and then return
3699
    error code 8.
4134
    error code 8.
3700
  * The function is not supported for CD (returns error code 2).
4135
  * The function is not supported for CD (returns error code 2).
-
 
4136
 
-
 
4137
---------------------- Constants for registers: ----------------------
-
 
4138
  eax - SF_FILE (70)
3701
 
4139
 [ebx] - SSF_SET_END (4)
3702
======================================================================
4140
======================================================================
3703
==== Function 70, subfunction 5 - get information on file/folder. ====
4141
==== Function 70, subfunction 5 - get information on file/folder. ====
3704
======================================================================
4142
======================================================================
3705
Parameters:
4143
Parameters:
3706
  * eax = 70 - function number
4144
  * eax = 70 - function number
3707
  * ebx = pointer to the information structure
4145
  * ebx = pointer to the information structure
3708
Format of the information structure:
4146
Format of the information structure:
3709
  * +0: dword: 5 = subfunction number
4147
  * +0: dword: 5 = subfunction number
3710
  * +4: dword: 0 (reserved)
4148
  * +4: dword: 0 (reserved)
3711
  * +8: dword: 0 (reserved)
4149
  * +8: dword: 0 (reserved)
3712
  * +12 = +0xC: dword: 0 (reserved)
4150
  * +12 = +0xC: dword: 0 (reserved)
3713
  * +16 = +0x10: dword: pointer to buffer for data (40 bytes)
4151
  * +16 = +0x10: dword: pointer to buffer for data (40 bytes)
3714
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4152
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3715
    given in the general description
4153
    given in the general description
3716
    or
4154
    or
3717
  * +20 = +0x14: db 0
4155
  * +20 = +0x14: db 0
3718
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4156
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3719
Returned value:
4157
Returned value:
3720
  * eax = 0 - success, otherwise file system error code
4158
  * eax = 0 - success, otherwise file system error code
3721
  * ebx destroyed
4159
  * ebx destroyed
3722
Information on file is returned in the BDFE format (block of data
4160
Information on file is returned in the BDFE format (block of data
3723
for folder entry), explained in the description of
4161
for folder entry), explained in the description of
3724
subfunction 1, but without filename
4162
subfunction 1, but without filename
3725
(i.e. only first 40 = 0x28 bytes).
4163
(i.e. only first 40 = 0x28 bytes).
3726
Remarks:
4164
Remarks:
3727
  * The function does not support virtual folders such as /, /rd and
4165
  * The function does not support virtual folders such as /, /rd and
3728
    root folders like /rd/1.
4166
    root folders like /rd/1.
-
 
4167
 
-
 
4168
---------------------- Constants for registers: ----------------------
-
 
4169
  eax - SF_FILE (70)
3729
 
4170
 [ebx] - SSF_GET_INFO (5)
3730
======================================================================
4171
======================================================================
3731
===== Function 70, subfunction 6 - set attributes of file/folder. ====
4172
===== Function 70, subfunction 6 - set attributes of file/folder. ====
3732
======================================================================
4173
======================================================================
3733
Parameters:
4174
Parameters:
3734
  * eax = 70 - function number
4175
  * eax = 70 - function number
3735
  * ebx = pointer to the information structure
4176
  * ebx = pointer to the information structure
3736
Format of the information structure:
4177
Format of the information structure:
3737
  * +0: dword: 6 = subfunction number
4178
  * +0: dword: 6 = subfunction number
3738
  * +4: dword: 0 (reserved)
4179
  * +4: dword: 0 (reserved)
3739
  * +8: dword: 0 (reserved)
4180
  * +8: dword: 0 (reserved)
3740
  * +12 = +0xC: dword: 0 (reserved)
4181
  * +12 = +0xC: dword: 0 (reserved)
3741
  * +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
4182
  * +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
3742
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4183
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3743
    given in the general description
4184
    given in the general description
3744
    or
4185
    or
3745
  * +20 = +0x14: db 0
4186
  * +20 = +0x14: db 0
3746
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4187
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3747
Returned value:
4188
Returned value:
3748
  * eax = 0 - success, otherwise file system error code
4189
  * eax = 0 - success, otherwise file system error code
3749
  * ebx destroyed
4190
  * ebx destroyed
3750
File attributes are first 32 bytes in BDFE (block of data
4191
File attributes are first 32 bytes in BDFE (block of data
3751
for folder entry), explained in the description of subfunction 1
4192
for folder entry), explained in the description of subfunction 1
3752
(that is, without name and size of file). Attribute
4193
(that is, without name and size of file). Attribute
3753
file/folder/volume label (bits 3,4 in dword +0) is not changed.
4194
file/folder/volume label (bits 3,4 in dword +0) is not changed.
3754
Byte +4 (name format) is ignored.
4195
Byte +4 (name format) is ignored.
3755
Remarks:
4196
Remarks:
3756
  * The function does not support virtual folders such as /, /rd and
4197
  * The function does not support virtual folders such as /, /rd and
3757
    root folders like /rd/1.
4198
    root folders like /rd/1.
3758
  * The function is not supported for CD (returns error code 2).
4199
  * The function is not supported for CD (returns error code 2).
-
 
4200
 
-
 
4201
---------------------- Constants for registers: ----------------------
-
 
4202
  eax - SF_FILE (70)
3759
 
4203
 [ebx] - SSF_SET_INFO (6)
3760
======================================================================
4204
======================================================================
3761
=========== Function 70, subfunction 7 - start application. ==========
4205
=========== Function 70, subfunction 7 - start application. ==========
3762
======================================================================
4206
======================================================================
3763
Parameters:
4207
Parameters:
3764
  * eax = 70 - function number
4208
  * eax = 70 - function number
3765
  * ebx = pointer to the information structure
4209
  * ebx = pointer to the information structure
3766
Format of the information structure:
4210
Format of the information structure:
3767
  * +0: dword: 7 = subfunction number
4211
  * +0: dword: 7 = subfunction number
3768
  * +4: dword: flags field:
4212
  * +4: dword: flags field:
3769
    * bit 0: start process as debugged
4213
    * bit 0: start process as debugged
3770
    * other bits are reserved and must be set to 0
4214
    * other bits are reserved and must be set to 0
3771
  * +8: dword: 0 or pointer to ASCIIZ-string with parameters
4215
  * +8: dword: 0 or pointer to ASCIIZ-string with parameters
3772
  * +12 = +0xC: dword: 0 (reserved)
4216
  * +12 = +0xC: dword: 0 (reserved)
3773
  * +16 = +0x10: dword: 0 (reserved)
4217
  * +16 = +0x10: dword: 0 (reserved)
3774
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4218
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3775
    given in the general description
4219
    given in the general description
3776
    or
4220
    or
3777
  * +20 = +0x14: db 0
4221
  * +20 = +0x14: db 0
3778
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4222
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3779
Returned value:
4223
Returned value:
3780
  * eax > 0 - program is loaded, eax contains PID
4224
  * eax > 0 - program is loaded, eax contains PID
3781
  * eax < 0 - an error has occured, -eax contains
4225
  * eax < 0 - an error has occured, -eax contains
3782
    file system error code
4226
    file system error code
3783
  * ebx destroyed
4227
  * ebx destroyed
3784
Remarks:
4228
Remarks:
3785
  * Command line must be terminated by the character with the code 0
4229
  * Command line must be terminated by the character with the code 0
3786
    (ASCIIZ-string); function takes into account either all characters
4230
    (ASCIIZ-string); function takes into account either all characters
3787
    up to terminating zero inclusively or first 256 character
4231
    up to terminating zero inclusively or first 256 character
3788
    regarding what is less.
4232
    regarding what is less.
3789
  * If the process is started as debugged, it is created in
4233
  * If the process is started as debugged, it is created in
3790
    the suspended state; to run use subfunction 5 of function 69.
4234
    the suspended state; to run use subfunction 5 of function 69.
-
 
4235
 
-
 
4236
---------------------- Constants for registers: ----------------------
-
 
4237
  eax - SF_FILE (70)
3791
 
4238
 [ebx] - SSF_START_APP (7)
3792
======================================================================
4239
======================================================================
3793
========== Function 70, subfunction 8 - delete file/folder. ==========
4240
========== Function 70, subfunction 8 - delete file/folder. ==========
3794
======================================================================
4241
======================================================================
3795
Parameters:
4242
Parameters:
3796
  * eax = 70 - function number
4243
  * eax = 70 - function number
3797
  * ebx = pointer to the information structure
4244
  * ebx = pointer to the information structure
3798
Format of the information structure:
4245
Format of the information structure:
3799
  * +0: dword: 8 = subfunction number
4246
  * +0: dword: 8 = subfunction number
3800
  * +4: dword: 0 (reserved)
4247
  * +4: dword: 0 (reserved)
3801
  * +8: dword: 0 (reserved)
4248
  * +8: dword: 0 (reserved)
3802
  * +12 = +0xC: dword: 0 (reserved)
4249
  * +12 = +0xC: dword: 0 (reserved)
3803
  * +16 = +0x10: dword: 0 (reserved)
4250
  * +16 = +0x10: dword: 0 (reserved)
3804
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4251
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3805
    given in the general description
4252
    given in the general description
3806
    or
4253
    or
3807
  * +20 = +0x14: db 0
4254
  * +20 = +0x14: db 0
3808
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4255
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3809
Returned value:
4256
Returned value:
3810
  * eax = 0 - success, otherwise file system error code
4257
  * eax = 0 - success, otherwise file system error code
3811
  * ebx destroyed
4258
  * ebx destroyed
3812
Remarks:
4259
Remarks:
3813
  * The function is not supported for CD (returns error code 2).
4260
  * The function is not supported for CD (returns error code 2).
3814
  * The function can delete only empty folders (attempt to delete
4261
  * The function can delete only empty folders (attempt to delete
3815
    nonempty folder results in error with code 10, "access denied").
4262
    nonempty folder results in error with code 10, "access denied").
-
 
4263
 
-
 
4264
---------------------- Constants for registers: ----------------------
-
 
4265
  eax - SF_FILE (70)
3816
 
4266
 [ebx] - SSF_DELETE (8)
3817
======================================================================
4267
======================================================================
3818
============= Function 70, subfunction 9 - create folder. ============
4268
============= Function 70, subfunction 9 - create folder. ============
3819
======================================================================
4269
======================================================================
3820
Parameters:
4270
Parameters:
3821
  * eax = 70 - function number
4271
  * eax = 70 - function number
3822
  * ebx = pointer to the information structure
4272
  * ebx = pointer to the information structure
3823
Format of the information structure:
4273
Format of the information structure:
3824
  * +0: dword: 9 = subfunction number
4274
  * +0: dword: 9 = subfunction number
3825
  * +4: dword: 0 (reserved)
4275
  * +4: dword: 0 (reserved)
3826
  * +8: dword: 0 (reserved)
4276
  * +8: dword: 0 (reserved)
3827
  * +12 = +0xC: dword: 0 (reserved)
4277
  * +12 = +0xC: dword: 0 (reserved)
3828
  * +16 = +0x10: dword: 0 (reserved)
4278
  * +16 = +0x10: dword: 0 (reserved)
3829
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
4279
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
3830
    given in the general description
4280
    given in the general description
3831
    or
4281
    or
3832
  * +20 = +0x14: db 0
4282
  * +20 = +0x14: db 0
3833
  * +21 = +0x15: dd pointer to ASCIIZ-string with folder name
4283
  * +21 = +0x15: dd pointer to ASCIIZ-string with folder name
3834
Returned value:
4284
Returned value:
3835
  * eax = 0 - success, otherwise file system error code
4285
  * eax = 0 - success, otherwise file system error code
3836
  * ebx destroyed
4286
  * ebx destroyed
3837
Remarks:
4287
Remarks:
3838
  * The function is not supported for CD (returns error code 2).
4288
  * The function is not supported for CD (returns error code 2).
3839
  * The parent folder must already exist.
4289
  * The parent folder must already exist.
3840
  * If target folder already exists, function returns success (eax=0).
4290
  * If target folder already exists, function returns success (eax=0).
-
 
4291
 
-
 
4292
---------------------- Constants for registers: ----------------------
-
 
4293
  eax - SF_FILE (70)
3841
 
4294
 [ebx] - SSF_CREATE_FOLDER (9)
3842
======================================================================
4295
======================================================================
3843
========== Function 71, subfunction 1 - set window caption. ==========
4296
========== Function 71, subfunction 1 - set window caption. ==========
3844
======================================================================
4297
======================================================================
3845
Parameters:
4298
Parameters:
3846
  * eax = 71 - function number
4299
  * eax = 71 - function number
3847
  * ebx = 1 - subfunction number
4300
  * ebx = 1 - subfunction number
3848
  * ecx = pointer to zero terminated string
4301
  * ecx = pointer to zero terminated string
3849
Returned value:
4302
Returned value:
3850
  * function does not return value
4303
  * function does not return value
3851
Remarks:
4304
Remarks:
3852
  * You may set the caption string encoding by putting
4305
  * You may set the caption string encoding by putting
3853
    at the start of the string a byte with next values:
4306
    at the start of the string a byte with next values:
3854
    1 = cp866
4307
    1 = cp866
3855
    2 = UTF-16LE
4308
    2 = UTF-16LE
3856
    3 = UTF-8
4309
    3 = UTF-8
3857
    otherwise will be used cp866.
4310
    otherwise will be used cp866.
3858
  * Pass NULL in ecx to remove caption.
4311
  * Pass NULL in ecx to remove caption.
-
 
4312
 
-
 
4313
---------------------- Constants for registers: ----------------------
3859
 
4314
  eax - SF_SET_CAPTION (71)
3860
======================================================================
4315
======================================================================
3861
=============== Function 72 - send message to a window. ==============
4316
=============== Function 72 - send message to a window. ==============
3862
======================================================================
4317
======================================================================
3863
 
4318
 
3864
- Subfunction 1 - send message with parameter to the active window. --
4319
- Subfunction 1 - send message with parameter to the active window. --
3865
Parameters:
4320
Parameters:
3866
  * eax = 72 - function number
4321
  * eax = 72 - function number
3867
  * ebx = 1 - subfunction number
4322
  * ebx = 1 - subfunction number
3868
  * ecx = event code: 2 or 3
4323
  * ecx = event code: 2 or 3
3869
  * edx = parameter: key code for ecx=2, button identifier for ecx=3
4324
  * edx = parameter: key code for ecx=2, button identifier for ecx=3
3870
Returned value:
4325
Returned value:
3871
  * eax = 0 - success
4326
  * eax = 0 - success
3872
  * eax = 1 - buffer is full
4327
  * eax = 1 - buffer is full
-
 
4328
 
-
 
4329
---------------------- Constants for registers: ----------------------
3873
 
4330
  eax - SF_SEND_MESSAGE (72)
3874
======================================================================
4331
======================================================================
3875
===================== Function 73 - blit bitmap  =====================
4332
===================== Function 73 - blit bitmap  =====================
3876
======================================================================
4333
======================================================================
3877
 
4334
 
3878
Parameters:
4335
Parameters:
3879
  * eax = 73 - function number
4336
  * eax = 73 - function number
3880
 
4337
 
3881
  * ebx = ROP and optional flags
4338
  * ebx = ROP and optional flags
3882
     31           6 5  4 3   0
4339
     31           6 5  4 3   0
3883
     [  reserved  ][T][B][ROP]
4340
     [  reserved  ][T][B][ROP]
3884
     ROP - raster operation code
4341
     ROP - raster operation code
3885
        0: Copy
4342
        0: Copy
3886
     1-15: reserved
4343
     1-15: reserved
3887
     B   - blit into the background surface
4344
     B   - blit into the background surface
3888
     T   - transparent blit
4345
     T   - transparent blit
3889
 
4346
 
3890
  * ecx = pointer to the function parameters
4347
  * ecx = pointer to the function parameters
3891
        destination offset and clipping
4348
        destination offset and clipping
3892
     +0 signed dword: destination rectangle X offset from the window
4349
     +0 signed dword: destination rectangle X offset from the window
3893
                      top-left corner
4350
                      top-left corner
3894
     +4 signed dword: destination rectangle Y offset from the window
4351
     +4 signed dword: destination rectangle Y offset from the window
3895
                      top-left corner
4352
                      top-left corner
3896
     +8 dword:        destination rectangle width
4353
     +8 dword:        destination rectangle width
3897
    +12 dword:        destination rectangle height
4354
    +12 dword:        destination rectangle height
3898
 
4355
 
3899
        source offset and clipping
4356
        source offset and clipping
3900
    +16 signed dword: source rectangle X offset from the bitmap
4357
    +16 signed dword: source rectangle X offset from the bitmap
3901
                      top-left corner
4358
                      top-left corner
3902
    +20 signed dword: source rectangle Y offset from the bitmap
4359
    +20 signed dword: source rectangle Y offset from the bitmap
3903
                      top-left corner
4360
                      top-left corner
3904
    +24 dword:        source rectangle width
4361
    +24 dword:        source rectangle width
3905
    +28 dword:        source rectangle height
4362
    +28 dword:        source rectangle height
3906
 
4363
 
3907
    +32: dword: bitmap data - must be 32bpp
4364
    +32: dword: bitmap data - must be 32bpp
3908
    +36: dword: size of the bitmap row in bytes
4365
    +36: dword: size of the bitmap row in bytes
3909
 
4366
 
3910
Returned value:
4367
Returned value:
3911
  * function does not return value
4368
  * function does not return value
-
 
4369
 
-
 
4370
---------------------- Constants for registers: ----------------------
3912
 
4371
  eax - SF_BLITTER (73)
3913
======================================================================
4372
======================================================================
3914
= Function 74, Subfunction 255, Get number of active network devices. =
4373
= Function 74, Subfunction 255, Get number of active network devices. =
3915
======================================================================
4374
======================================================================
3916
Parameters:
4375
Parameters:
3917
  * eax = 74 - function number
4376
  * eax = 74 - function number
3918
  * bl = 255 - subfunction number
4377
  * bl = 255 - subfunction number
3919
Returned value:
4378
Returned value:
3920
  * eax = number of active network devices
4379
  * eax = number of active network devices
-
 
4380
 
-
 
4381
---------------------- Constants for registers: ----------------------
-
 
4382
  eax - SF_NETWORK_GET (74)
3921
 
4383
   bl - SSF_DEVICE_COUNT (255)
3922
======================================================================
4384
======================================================================
3923
======== Function 74, Subfunction 0, Get network device type. ========
4385
======== Function 74, Subfunction 0, Get network device type. ========
3924
======================================================================
4386
======================================================================
3925
Parameters:
4387
Parameters:
3926
  * eax = 74 - function number
4388
  * eax = 74 - function number
3927
  * bl = 0 - subfunction number
4389
  * bl = 0 - subfunction number
3928
  * bh = device number
4390
  * bh = device number
3929
Returned value:
4391
Returned value:
3930
  * eax = device type number
4392
  * eax = device type number
-
 
4393
 
-
 
4394
---------------------- Constants for registers: ----------------------
-
 
4395
  eax - SF_NETWORK_GET (74)
3931
 
4396
   bl - SSF_DEVICE_TYPE (0)
3932
======================================================================
4397
======================================================================
3933
======== Function 74, Subfunction 1, Get network device name. ========
4398
======== Function 74, Subfunction 1, Get network device name. ========
3934
======================================================================
4399
======================================================================
3935
Parameters:
4400
Parameters:
3936
  * eax = 74 - function number
4401
  * eax = 74 - function number
3937
  * bl = 1 - subfunction number
4402
  * bl = 1 - subfunction number
3938
  * bh = device number
4403
  * bh = device number
3939
  * ecx = pointer to 64 byte buffer
4404
  * ecx = pointer to 64 byte buffer
3940
Returned value:
4405
Returned value:
3941
  * eax = -1 on error
4406
  * eax = -1 on error
3942
  * The network device name is written into the buffer, on success
4407
  * The network device name is written into the buffer, on success
-
 
4408
 
-
 
4409
---------------------- Constants for registers: ----------------------
-
 
4410
  eax - SF_NETWORK_GET (74)
3943
 
4411
   bl - SSF_DEVICE_NAME (1)
3944
======================================================================
4412
======================================================================
3945
========= Function 74, Subfunction 2, Reset network device. ==========
4413
========= Function 74, Subfunction 2, Reset network device. ==========
3946
======================================================================
4414
======================================================================
3947
Parameters:
4415
Parameters:
3948
  * eax = 74 - function number
4416
  * eax = 74 - function number
3949
  * bl = 2 - subfunction number
4417
  * bl = 2 - subfunction number
3950
  * bh = device number
4418
  * bh = device number
3951
Returned value:
4419
Returned value:
3952
  * eax = -1 on error
4420
  * eax = -1 on error
-
 
4421
 
-
 
4422
---------------------- Constants for registers: ----------------------
-
 
4423
  eax - SF_NETWORK_GET (74)
3953
 
4424
   bl - SSF_RESET_DEVICE (2)
3954
======================================================================
4425
======================================================================
3955
========== Function 74, Subfunction 3, Stop network device. ==========
4426
========== Function 74, Subfunction 3, Stop network device. ==========
3956
======================================================================
4427
======================================================================
3957
Parameters:
4428
Parameters:
3958
  * eax = 74 - function number
4429
  * eax = 74 - function number
3959
  * bl = 3 - subfunction number
4430
  * bl = 3 - subfunction number
3960
  * bh = device number
4431
  * bh = device number
3961
Returned value:
4432
Returned value:
3962
  * eax = -1 on error
4433
  * eax = -1 on error
-
 
4434
 
-
 
4435
---------------------- Constants for registers: ----------------------
-
 
4436
  eax - SF_NETWORK_GET (74)
3963
 
4437
   bl - SSF_STOP_DEVICE (3)
3964
======================================================================
4438
======================================================================
3965
=========== Function 74, Subfunction 4, Get device pointer. ==========
4439
=========== Function 74, Subfunction 4, Get device pointer. ==========
3966
======================================================================
4440
======================================================================
3967
Parameters:
4441
Parameters:
3968
  * eax = 74 - function number
4442
  * eax = 74 - function number
3969
  * bl = 4 - subfunction number
4443
  * bl = 4 - subfunction number
3970
  * bh = device number
4444
  * bh = device number
3971
Returned value:
4445
Returned value:
3972
  * eax = device pointer, -1 on error
4446
  * eax = device pointer, -1 on error
-
 
4447
 
-
 
4448
---------------------- Constants for registers: ----------------------
-
 
4449
  eax - SF_NETWORK_GET (74)
3973
 
4450
   bl - SSF_DEVICE_POINER (4)
3974
======================================================================
4451
======================================================================
3975
========= Function 74, Subfunction 6, Get packet TX counter. =========
4452
========= Function 74, Subfunction 6, Get packet TX counter. =========
3976
======================================================================
4453
======================================================================
3977
Parameters:
4454
Parameters:
3978
  * eax = 74 - function number
4455
  * eax = 74 - function number
3979
  * bl = 6 - subfunction number
4456
  * bl = 6 - subfunction number
3980
  * bh = device number
4457
  * bh = device number
3981
Returned value:
4458
Returned value:
3982
  * eax = Number of packets sent since device start, -1 on error
4459
  * eax = Number of packets sent since device start, -1 on error
-
 
4460
 
-
 
4461
---------------------- Constants for registers: ----------------------
-
 
4462
  eax - SF_NETWORK_GET (74)
3983
 
4463
   bl - SSF_TX_PACKET_COUNT (6)
3984
======================================================================
4464
======================================================================
3985
========= Function 74, Subfunction 7, Get packet RX counter. =========
4465
========= Function 74, Subfunction 7, Get packet RX counter. =========
3986
======================================================================
4466
======================================================================
3987
Parameters:
4467
Parameters:
3988
  * eax = 74 - function number
4468
  * eax = 74 - function number
3989
  * bl = 7 - subfunction number
4469
  * bl = 7 - subfunction number
3990
  * bh = device number
4470
  * bh = device number
3991
Returned value:
4471
Returned value:
3992
  * eax = Number of packets received since device start, -1 on error
4472
  * eax = Number of packets received since device start, -1 on error
-
 
4473
 
-
 
4474
---------------------- Constants for registers: ----------------------
-
 
4475
  eax - SF_NETWORK_GET (74)
3993
 
4476
   bl - SSF_RX_PACKET_COUNT (7)
3994
======================================================================
4477
======================================================================
3995
========== Function 74, Subfunction 8, Get TX byte counter. ==========
4478
========== Function 74, Subfunction 8, Get TX byte counter. ==========
3996
======================================================================
4479
======================================================================
3997
Parameters:
4480
Parameters:
3998
  * eax = 74 - function number
4481
  * eax = 74 - function number
3999
  * bl = 8 - subfunction number
4482
  * bl = 8 - subfunction number
4000
  * bh = device number
4483
  * bh = device number
4001
Returned value:
4484
Returned value:
4002
  * eax = Number of bytes sent since device start (lower dword)
4485
  * eax = Number of bytes sent since device start (lower dword)
4003
                  -1 on error
4486
                  -1 on error
4004
  * ebx = Number of bytes sent since device start (higher dword)
4487
  * ebx = Number of bytes sent since device start (higher dword)
-
 
4488
 
-
 
4489
---------------------- Constants for registers: ----------------------
-
 
4490
  eax - SF_NETWORK_GET (74)
4005
 
4491
   bl - SSF_TX_BYTE_COUNT (8)
4006
======================================================================
4492
======================================================================
4007
========== Function 74, Subfunction 9, Get RX byte counter. ==========
4493
========== Function 74, Subfunction 9, Get RX byte counter. ==========
4008
======================================================================
4494
======================================================================
4009
Parameters:
4495
Parameters:
4010
  * eax = 74 - function number
4496
  * eax = 74 - function number
4011
  * bl = 9 - subfunction number
4497
  * bl = 9 - subfunction number
4012
  * bh = device number
4498
  * bh = device number
4013
Returned value:
4499
Returned value:
4014
  * eax = Number of bytes received since device start (lower dword)
4500
  * eax = Number of bytes received since device start (lower dword)
4015
                  -1 on error
4501
                  -1 on error
4016
  * ebx = Number of bytes received since device start (higher dword)
4502
  * ebx = Number of bytes received since device start (higher dword)
-
 
4503
 
-
 
4504
---------------------- Constants for registers: ----------------------
-
 
4505
  eax - SF_NETWORK_GET (74)
4017
 
4506
   bl - SSF_RX_BYTE_COUNT (9)
4018
======================================================================
4507
======================================================================
4019
========== Function 74, Subfunction 10, Get link status. =============
4508
========== Function 74, Subfunction 10, Get link status. =============
4020
======================================================================
4509
======================================================================
4021
Parameters:
4510
Parameters:
4022
  * eax = 74 - function number
4511
  * eax = 74 - function number
4023
  * bl = 10 - subfunction number
4512
  * bl = 10 - subfunction number
4024
  * bh = device number
4513
  * bh = device number
4025
Returned value:
4514
Returned value:
4026
  * eax = link status, -1 on error
4515
  * eax = link status, -1 on error
4027
 
4516
 
4028
  Link status:
4517
  Link status:
4029
    ETH_LINK_DOWN   =    0b         ; Link is down
4518
    ETH_LINK_DOWN   =    0b         ; Link is down
4030
    ETH_LINK_UNKNOWN=    1b         ; There could be an active link
4519
    ETH_LINK_UNKNOWN=    1b         ; There could be an active link
4031
    ETH_LINK_FD     =   10b         ; full duplex flag
4520
    ETH_LINK_FD     =   10b         ; full duplex flag
4032
    ETH_LINK_10M    =  100b         ; 10 mbit
4521
    ETH_LINK_10M    =  100b         ; 10 mbit
4033
    ETH_LINK_100M   = 1000b         ; 100 mbit
4522
    ETH_LINK_100M   = 1000b         ; 100 mbit
4034
    ETH_LINK_1G     = 1100b         ; gigabit
4523
    ETH_LINK_1G     = 1100b         ; gigabit
-
 
4524
 
-
 
4525
---------------------- Constants for registers: ----------------------
-
 
4526
  eax - SF_NETWORK_GET (74)
4035
 
4527
   bl - SSF_LINK_STATUS (10)
4036
======================================================================
4528
======================================================================
4037
============== Function 75, Subfunction 0, Open socket. ==============
4529
============== Function 75, Subfunction 0, Open socket. ==============
4038
======================================================================
4530
======================================================================
4039
Parameters:
4531
Parameters:
4040
  * eax = 75 - function number
4532
  * eax = 75 - function number
4041
  * bl = 0 - subfunction number
4533
  * bl = 0 - subfunction number
4042
  * ecx = domain
4534
  * ecx = domain
4043
  * edx = type
4535
  * edx = type
4044
  * esi = protocol
4536
  * esi = protocol
4045
Returned value:
4537
Returned value:
4046
  * eax = socket number, -1 on error
4538
  * eax = socket number, -1 on error
4047
  * ebx = errorcode
4539
  * ebx = errorcode
-
 
4540
 
-
 
4541
---------------------- Constants for registers: ----------------------
-
 
4542
  eax - SF_NETWORK_SOCKET (75)
4048
 
4543
   bl - SSF_OPEN (0)
4049
======================================================================
4544
======================================================================
4050
============= Function 75, Subfunction 1, Close socket. ==============
4545
============= Function 75, Subfunction 1, Close socket. ==============
4051
======================================================================
4546
======================================================================
4052
Parameters:
4547
Parameters:
4053
  * eax = 75 - function number
4548
  * eax = 75 - function number
4054
  * bl = 1 - subfunction number
4549
  * bl = 1 - subfunction number
4055
  * ecx = socket number
4550
  * ecx = socket number
4056
Returned value:
4551
Returned value:
4057
  * eax = -1 on error
4552
  * eax = -1 on error
4058
  * ebx = errorcode
4553
  * ebx = errorcode
-
 
4554
 
-
 
4555
---------------------- Constants for registers: ----------------------
-
 
4556
  eax - SF_NETWORK_SOCKET (75)
4059
 
4557
   bl - SSF_CLOSE (1)
4060
======================================================================
4558
======================================================================
4061
================== Function 75, Subfunction 2, Bind. =================
4559
================== Function 75, Subfunction 2, Bind. =================
4062
======================================================================
4560
======================================================================
4063
Parameters:
4561
Parameters:
4064
  * eax = 75 - function number
4562
  * eax = 75 - function number
4065
  * bl = 2 - subfunction number
4563
  * bl = 2 - subfunction number
4066
  * ecx = socket number
4564
  * ecx = socket number
4067
  * edx = pointer to sockaddr structure
4565
  * edx = pointer to sockaddr structure
4068
  * esi = length of sockaddr structure
4566
  * esi = length of sockaddr structure
4069
Returned value:
4567
Returned value:
4070
  * eax = -1 on error
4568
  * eax = -1 on error
4071
  * ebx = errorcode
4569
  * ebx = errorcode
-
 
4570
 
-
 
4571
---------------------- Constants for registers: ----------------------
-
 
4572
  eax - SF_NETWORK_SOCKET (75)
4072
 
4573
   bl - SSF_BIND (2)
4073
======================================================================
4574
======================================================================
4074
================= Function 75, Subfunction 3, Listen. ================
4575
================= Function 75, Subfunction 3, Listen. ================
4075
======================================================================
4576
======================================================================
4076
Parameters:
4577
Parameters:
4077
  * eax = 75 - function number
4578
  * eax = 75 - function number
4078
  * bl = 3 - subfunction number
4579
  * bl = 3 - subfunction number
4079
  * ecx = socket number
4580
  * ecx = socket number
4080
  * edx = backlog
4581
  * edx = backlog
4081
Returned value:
4582
Returned value:
4082
  * eax = -1 on error
4583
  * eax = -1 on error
4083
  * ebx = errorcode
4584
  * ebx = errorcode
-
 
4585
 
-
 
4586
---------------------- Constants for registers: ----------------------
-
 
4587
  eax - SF_NETWORK_SOCKET (75)
4084
 
4588
   bl - SSF_LISTEN (3)
4085
======================================================================
4589
======================================================================
4086
================ Function 75, Subfunction 4, Connect. ================
4590
================ Function 75, Subfunction 4, Connect. ================
4087
======================================================================
4591
======================================================================
4088
Parameters:
4592
Parameters:
4089
  * eax = 75 - function number
4593
  * eax = 75 - function number
4090
  * bl = 4 - subfunction number
4594
  * bl = 4 - subfunction number
4091
  * ecx = socket number
4595
  * ecx = socket number
4092
  * edx = pointer to sockaddr structure
4596
  * edx = pointer to sockaddr structure
4093
  * esi = length of sockaddr structure
4597
  * esi = length of sockaddr structure
4094
Returned value:
4598
Returned value:
4095
  * eax = -1 on error
4599
  * eax = -1 on error
4096
  * ebx = errorcode
4600
  * ebx = errorcode
-
 
4601
 
-
 
4602
---------------------- Constants for registers: ----------------------
-
 
4603
  eax - SF_NETWORK_SOCKET (75)
4097
 
4604
   bl - SSF_CONNECT (4)
4098
======================================================================
4605
======================================================================
4099
================= Function 75, Subfunction 5, Accept. ================
4606
================= Function 75, Subfunction 5, Accept. ================
4100
======================================================================
4607
======================================================================
4101
Parameters:
4608
Parameters:
4102
  * eax = 75 - function number
4609
  * eax = 75 - function number
4103
  * bl = 5 - subfunction number
4610
  * bl = 5 - subfunction number
4104
  * ecx = socket number
4611
  * ecx = socket number
4105
  * edx = pointer to sockaddr structure
4612
  * edx = pointer to sockaddr structure
4106
  * esi = length of sockaddr structure
4613
  * esi = length of sockaddr structure
4107
Returned value:
4614
Returned value:
4108
  * eax = socket number of accepted socket, -1 on error
4615
  * eax = socket number of accepted socket, -1 on error
4109
  * ebx = errorcode
4616
  * ebx = errorcode
-
 
4617
 
-
 
4618
---------------------- Constants for registers: ----------------------
-
 
4619
  eax - SF_NETWORK_SOCKET (75)
4110
 
4620
   bl - SSF_ACCEPT (5)
4111
======================================================================
4621
======================================================================
4112
================== Function 75, Subfunction 6, Send. =================
4622
================== Function 75, Subfunction 6, Send. =================
4113
======================================================================
4623
======================================================================
4114
Parameters:
4624
Parameters:
4115
  * eax = 75 - function number
4625
  * eax = 75 - function number
4116
  * bl = 6 - subfunction number
4626
  * bl = 6 - subfunction number
4117
  * ecx = socket number
4627
  * ecx = socket number
4118
  * edx = pointer to buffer
4628
  * edx = pointer to buffer
4119
  * esi = length of buffer
4629
  * esi = length of buffer
4120
  * edi = flags
4630
  * edi = flags
4121
Returned value:
4631
Returned value:
4122
  * eax = number of bytes copied, -1 on error
4632
  * eax = number of bytes copied, -1 on error
4123
  * ebx = errorcode
4633
  * ebx = errorcode
-
 
4634
 
-
 
4635
---------------------- Constants for registers: ----------------------
-
 
4636
  eax - SF_NETWORK_SOCKET (75)
4124
 
4637
   bl - SSF_SEND (6)
4125
======================================================================
4638
======================================================================
4126
================ Function 75, Subfunction 7, Receive. ================
4639
================ Function 75, Subfunction 7, Receive. ================
4127
======================================================================
4640
======================================================================
4128
Parameters:
4641
Parameters:
4129
  * eax = 75 - function number
4642
  * eax = 75 - function number
4130
  * bl = 7 - subfunction number
4643
  * bl = 7 - subfunction number
4131
  * ecx = socket number
4644
  * ecx = socket number
4132
  * edx = pointer to buffer
4645
  * edx = pointer to buffer
4133
  * esi = length of buffer
4646
  * esi = length of buffer
4134
  * edi = flags
4647
  * edi = flags
4135
Returned value:
4648
Returned value:
4136
  * eax = number of bytes copied, -1 on error
4649
  * eax = number of bytes copied, -1 on error
4137
  * ebx = errorcode
4650
  * ebx = errorcode
-
 
4651
 
-
 
4652
---------------------- Constants for registers: ----------------------
-
 
4653
  eax - SF_NETWORK_SOCKET (75)
4138
 
4654
   bl - SSF_RECEIVE (7)
4139
======================================================================
4655
======================================================================
4140
=========== Function 75, Subfunction 8, Set socket options. ==========
4656
=========== Function 75, Subfunction 8, Set socket options. ==========
4141
======================================================================
4657
======================================================================
4142
Parameters:
4658
Parameters:
4143
  * eax = 75 - function number
4659
  * eax = 75 - function number
4144
  * bl = 8 - subfunction number
4660
  * bl = 8 - subfunction number
4145
  * ecx = socket number
4661
  * ecx = socket number
4146
  * edx = pointer to optstruct
4662
  * edx = pointer to optstruct
4147
Returned value:
4663
Returned value:
4148
  * eax = -1 on error
4664
  * eax = -1 on error
4149
  * ebx = errorcode
4665
  * ebx = errorcode
4150
Remarks:
4666
Remarks:
4151
 
4667
 
4152
  Optstruct: 
4668
  Optstruct: 
4153
    dd level
4669
    dd level
4154
    dd optionname
4670
    dd optionname
4155
    dd optlength
4671
    dd optlength
4156
    db options...
4672
    db options...
-
 
4673
 
-
 
4674
---------------------- Constants for registers: ----------------------
-
 
4675
  eax - SF_NETWORK_SOCKET (75)
4157
 
4676
   bl - SSF_SET_OPTIONS (8)
4158
======================================================================
4677
======================================================================
4159
=========== Function 75, Subfunction 9, Get socket options. ==========
4678
=========== Function 75, Subfunction 9, Get socket options. ==========
4160
======================================================================
4679
======================================================================
4161
Parameters:
4680
Parameters:
4162
  * eax = 75 - function number
4681
  * eax = 75 - function number
4163
  * bl = 9 - subfunction number
4682
  * bl = 9 - subfunction number
4164
  * ecx = socket number
4683
  * ecx = socket number
4165
  * edx = pointer to optstruct
4684
  * edx = pointer to optstruct
4166
Returned value:
4685
Returned value:
4167
  * eax = -1 on error
4686
  * eax = -1 on error
4168
  * ebx = errorcode
4687
  * ebx = errorcode
4169
Remarks:
4688
Remarks:
4170
 
4689
 
4171
  Optstruct: 
4690
  Optstruct: 
4172
    dd level
4691
    dd level
4173
    dd optionname
4692
    dd optionname
4174
    dd optlength
4693
    dd optlength
4175
    db options...
4694
    db options...
-
 
4695
 
-
 
4696
---------------------- Constants for registers: ----------------------
-
 
4697
  eax - SF_NETWORK_SOCKET (75)
4176
 
4698
   bl - SSF_GET_OPTIONS (9)
4177
======================================================================
4699
======================================================================
4178
============ Function 75, Subfunction 10, Get socketpair. ===========
4700
============ Function 75, Subfunction 10, Get socketpair. ===========
4179
======================================================================
4701
======================================================================
4180
Parameters:
4702
Parameters:
4181
  * eax = 75 - function number
4703
  * eax = 75 - function number
4182
  * bl = 10 - subfunction number
4704
  * bl = 10 - subfunction number
4183
Returned value:
4705
Returned value:
4184
  * eax = socketnum1, -1 on error
4706
  * eax = socketnum1, -1 on error
4185
  * ebx = socketnum2, errorcode on error
4707
  * ebx = socketnum2, errorcode on error
-
 
4708
 
-
 
4709
---------------------- Constants for registers: ----------------------
-
 
4710
  eax - SF_NETWORK_SOCKET (75)
4186
  
4711
   bl - SSF_GET_PAIR (10)
4187
======================================================================
4712
======================================================================
4188
============ Function 76, Network options and statistics. ============
4713
============ Function 76, Network options and statistics. ============
4189
======================================================================
4714
======================================================================
4190
Parameters:
4715
Parameters:
4191
  * eax = 76 - function number
4716
  * eax = 76 - function number
4192
  * high half of ebx = protocol number
4717
  * high half of ebx = protocol number
4193
  * bh = device number
4718
  * bh = device number
4194
  * bl = subfunction number
4719
  * bl = subfunction number
4195
 
4720
 
4196
Ethernet (0)
4721
Ethernet (0)
4197
        0 - Read MAC
4722
        0 - Read MAC
4198
        
4723
        
4199
IPv4 (1)
4724
IPv4 (1)
4200
        0 - Read # IP packets sent
4725
        0 - Read # IP packets sent
4201
        1 - Read # IP packets received
4726
        1 - Read # IP packets received
4202
        2 - Read IP
4727
        2 - Read IP
4203
        3 - Write IP
4728
        3 - Write IP
4204
        4 - Read DNS
4729
        4 - Read DNS
4205
        5 - Write DNS
4730
        5 - Write DNS
4206
        6 - Read subnet
4731
        6 - Read subnet
4207
        7 - Write subnet
4732
        7 - Write subnet
4208
        8 - Read gateway
4733
        8 - Read gateway
4209
        9 - Write gateway
4734
        9 - Write gateway
4210
        
4735
        
4211
ICMP (2)
4736
ICMP (2)
4212
        0 - Read # ICMP packets sent
4737
        0 - Read # ICMP packets sent
4213
        1 - Read # ICMP packets received
4738
        1 - Read # ICMP packets received
4214
        3 - enable/disable ICMP echo reply
4739
        3 - enable/disable ICMP echo reply
4215
 
4740
 
4216
UDP (3)
4741
UDP (3)
4217
        0 - Read # UDP packets sent
4742
        0 - Read # UDP packets sent
4218
        1 - Read # UDP packets received
4743
        1 - Read # UDP packets received
4219
 
4744
 
4220
TCP (4)
4745
TCP (4)
4221
        0 - Read # TCP packets sent
4746
        0 - Read # TCP packets sent
4222
        1 - Read # TCP packets received 
4747
        1 - Read # TCP packets received 
4223
        
4748
        
4224
ARP (5)
4749
ARP (5)
4225
        0 - Read # ARP packets sent
4750
        0 - Read # ARP packets sent
4226
        1 - Read # ARP packets received
4751
        1 - Read # ARP packets received
4227
        2 - Read # ARP entry's
4752
        2 - Read # ARP entry's
4228
        3 - Read ARP entry
4753
        3 - Read ARP entry
4229
        4 - Add static ARP entry
4754
        4 - Add static ARP entry
4230
        5 - Remove ARP entry (-1 = remove all)
4755
        5 - Remove ARP entry (-1 = remove all)
4231
        6 - Send ARP announce on specified interface
4756
        6 - Send ARP announce on specified interface
4232
        7 - Read # ARP conflicts (IP address conflicts) 
4757
        7 - Read # ARP conflicts (IP address conflicts) 
-
 
4758
 
-
 
4759
---------------------- Constants for registers: ----------------------
4233
 
4760
  eax - SF_NETWORK_PROTOCOL (76)
4234
======================================================================
4761
======================================================================
4235
=============== Function -1 - terminate thread/process ===============
4762
=============== Function -1 - terminate thread/process ===============
4236
======================================================================
4763
======================================================================
4237
Parameters:
4764
Parameters:
4238
  * eax = -1 - function number
4765
  * eax = -1 - function number
4239
Returned value:
4766
Returned value:
4240
  * function does not return neither value nor control
4767
  * function does not return neither value nor control
4241
Remarks:
4768
Remarks:
4242
  * If the process did not create threads obviously, it has only
4769
  * If the process did not create threads obviously, it has only
4243
    one thread, which termination results in process termination.
4770
    one thread, which termination results in process termination.
4244
  * If the current thread is last in the process, its termination
4771
  * If the current thread is last in the process, its termination
4245
    also results in process terminates.
4772
    also results in process terminates.
4246
  * This function terminates the current thread. Other thread can be
4773
  * This function terminates the current thread. Other thread can be
4247
    killed by call to subfunction 2 of function 18.
4774
    killed by call to subfunction 2 of function 18.
4248
 
4775
 
4249
======================================================================
4776
======================================================================
4250
=========================== List of events ===========================
4777
=========================== List of events ===========================
4251
======================================================================
4778
======================================================================
4252
Next event can be retrieved by the call of one from functions 10
4779
Next event can be retrieved by the call of one from functions 10
4253
(to wait for event), 11 (to check without waiting), 23
4780
(to wait for event), 11 (to check without waiting), 23
4254
(to wait during the given time).
4781
(to wait during the given time).
4255
These functions return only those events, which enter into a mask set
4782
These functions return only those events, which enter into a mask set
4256
by function 40. By default it is first three,
4783
by function 40. By default it is first three,
4257
there is enough for most applications.
4784
there is enough for most applications.
4258
Codes of events:
4785
Codes of events:
4259
  * 1 = redraw event (is reset by call to function 0)
4786
  * 1 = redraw event (is reset by call to function 0)
4260
  * 2 = key on keyboard is pressed (acts, only when the window is
4787
  * 2 = key on keyboard is pressed (acts, only when the window is
4261
    active) or hotkey is pressed; is reset, when all keys from
4788
    active) or hotkey is pressed; is reset, when all keys from
4262
    the buffer are read out by function 2
4789
    the buffer are read out by function 2
4263
  * 3 = button is pressed, defined earlier by function 8
4790
  * 3 = button is pressed, defined earlier by function 8
4264
    (or close button, created implicitly by function 0;
4791
    (or close button, created implicitly by function 0;
4265
    minimize button is handled by the system and sends no message;
4792
    minimize button is handled by the system and sends no message;
4266
    acts, only when the window is active;
4793
    acts, only when the window is active;
4267
    is reset when all buttons from the buffer
4794
    is reset when all buttons from the buffer
4268
    are read out by function 17)
4795
    are read out by function 17)
4269
  * 4 = reserved (in current implementation never comes even after
4796
  * 4 = reserved (in current implementation never comes even after
4270
    unmasking by function 40)
4797
    unmasking by function 40)
4271
  * 5 = kernel finished redrawing of the desktop background
4798
  * 5 = kernel finished redrawing of the desktop background
4272
  * 6 = mouse event (something happened - button pressing or moving;
4799
  * 6 = mouse event (something happened - button pressing or moving;
4273
    is reset at reading)
4800
    is reset at reading)
4274
  * 7 = IPC event (see function 60 -
4801
  * 7 = IPC event (see function 60 -
4275
    Inter Process Communication; is reset at reading)
4802
    Inter Process Communication; is reset at reading)
4276
  * 8 = network event (is reset at reading)
4803
  * 8 = network event (is reset at reading)
4277
  * 9 = debug event (is reset at reading; see
4804
  * 9 = debug event (is reset at reading; see
4278
    debug subsystem)
4805
    debug subsystem)
4279
  * 16..31 = event with appropriate IRQ
4806
  * 16..31 = event with appropriate IRQ
4280
    (16=IRQ0, 31=IRQ15) (is reset after reading all IRQ data)
4807
    (16=IRQ0, 31=IRQ15) (is reset after reading all IRQ data)
4281
 
4808
 
4282
======================================================================
4809
======================================================================
4283
=================== Error codes of the file system ===================
4810
=================== Error codes of the file system ===================
4284
======================================================================
4811
======================================================================
4285
  * 0 = success
4812
  * 0 = success
4286
  * 1 = base and/or partition of a hard disk is not defined
4813
  * 1 = base and/or partition of a hard disk is not defined
4287
    (by subfunctions 7, 8 of function 21)
4814
    (by subfunctions 7, 8 of function 21)
4288
  * 2 = function is not supported for the given file system
4815
  * 2 = function is not supported for the given file system
4289
  * 3 = unknown file system
4816
  * 3 = unknown file system
4290
  * 4 = reserved, is never returned in the current implementation
4817
  * 4 = reserved, is never returned in the current implementation
4291
  * 5 = file not found
4818
  * 5 = file not found
4292
  * 6 = end of file, EOF
4819
  * 6 = end of file, EOF
4293
  * 7 = pointer lies outside of application memory
4820
  * 7 = pointer lies outside of application memory
4294
  * 8 = disk is full
4821
  * 8 = disk is full
4295
  * 9 = FAT table is destroyed
4822
  * 9 = FAT table is destroyed
4296
  * 10 = access denied
4823
  * 10 = access denied
4297
  * 11 = device error
4824
  * 11 = device error
4298
Application start functions can return also following errors:
4825
Application start functions can return also following errors:
4299
  * 30 = 0x1E = not enough memory
4826
  * 30 = 0x1E = not enough memory
4300
  * 31 = 0x1F = file is not executable
4827
  * 31 = 0x1F = file is not executable
4301
  * 32 = 0x20 = too many processes
4828
  * 32 = 0x20 = too many processes
4302
>
4829
>
4303
>
4830
>