Subversion Repositories Kolibri OS

Rev

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

Rev 5565 Rev 5984
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
 
128
 
129
======================================================================
129
======================================================================
130
================ Function 1 - put pixel in the window. ===============
130
================ Function 1 - put pixel in the window. ===============
131
======================================================================
131
======================================================================
132
Parameters:
132
Parameters:
133
  * eax = 1 - function number
133
  * eax = 1 - function number
134
  * ebx = x-coordinate (relative to the window)
134
  * ebx = x-coordinate (relative to the window)
135
  * ecx = y-coordinate (relative to the window)
135
  * ecx = y-coordinate (relative to the window)
136
  * edx = 0x00RRGGBB - color of a pixel
136
  * edx = 0x00RRGGBB - color of a pixel
137
    edx = 0x01xxxxxx - invert color of a pixel
137
    edx = 0x01xxxxxx - invert color of a pixel
138
          (low 24 bits are ignored)
138
          (low 24 bits are ignored)
139
Returned value:
139
Returned value:
140
  * function does not return value
140
  * function does not return value
141
 
141
 
142
======================================================================
142
======================================================================
143
============ Function 2 - get the code of the pressed key. ===========
143
============ Function 2 - get the code of the pressed key. ===========
144
======================================================================
144
======================================================================
145
Takes away the code of the pressed key from the buffer.
145
Takes away the code of the pressed key from the buffer.
146
Parameters:
146
Parameters:
147
  * eax = 2 - function number
147
  * eax = 2 - function number
148
Returned value:
148
Returned value:
149
  * if the buffer is empty, function returns eax=1
149
  * if the buffer is empty, function returns eax=1
150
  * if the buffer is not empty, function returns al=0,
150
  * if the buffer is not empty, function returns al=0,
151
    ah=code of the pressed key,
151
    ah=code of the pressed key,
152
    bits 16-23 = contain scancode for pressed key in ASCII mode,
152
    bits 16-23 = contain scancode for pressed key in ASCII mode,
153
                 in the scancodes mode this bits cleared.
153
                 in the scancodes mode this bits cleared.
154
    bits 23-31 = zero
154
    bits 23-31 = zero
155
  * if there is "hotkey", function returns al=2,
155
  * if there is "hotkey", function returns al=2,
156
    ah=scancode of the pressed key (0 for control keys),
156
    ah=scancode of the pressed key (0 for control keys),
157
    high word of eax contains a status of control keys at the moment
157
    high word of eax contains a status of control keys at the moment
158
    of pressing a hotkey
158
    of pressing a hotkey
159
Remarks:
159
Remarks:
160
  * There is a common system buffer of the pressed keys
160
  * There is a common system buffer of the pressed keys
161
    by a size of 120 bytes, organized as queue.
161
    by a size of 120 bytes, organized as queue.
162
  * There is one more common system buffer on 120 "hotkeys".
162
  * There is one more common system buffer on 120 "hotkeys".
163
  * If the application with the inactive window calls this function,
163
  * If the application with the inactive window calls this function,
164
    the buffer of the pressed keys is considered to be empty.
164
    the buffer of the pressed keys is considered to be empty.
165
  * By default this function returns ASCII-codes; to switch
165
  * By default this function returns ASCII-codes; to switch
166
    to the scancodes mode (and back) use function 66.
166
    to the scancodes mode (and back) use function 66.
167
    However, hotkeys are always notificated as scancodes.
167
    However, hotkeys are always notificated as scancodes.
168
  * To find out, what keys correspond to what codes, start
168
  * To find out, what keys correspond to what codes, start
169
    the application keyascii and scancode.
169
    the application keyascii and scancode.
170
  * Scancodes come directly from keyboard and are fixed;
170
  * Scancodes come directly from keyboard and are fixed;
171
    ASCII-codes turn out with usage of the conversion tables,
171
    ASCII-codes turn out with usage of the conversion tables,
172
    which can be set by subfunction 2 of function 21
172
    which can be set by subfunction 2 of function 21
173
    and get by subfunction 2 of function 26.
173
    and get by subfunction 2 of function 26.
174
  * As a consequence, ASCII-codes take into account current
174
  * As a consequence, ASCII-codes take into account current
175
    keyboard layout (rus/en) as opposed to scancodes.
175
    keyboard layout (rus/en) as opposed to scancodes.
176
  * This function notifies only about those hotkeys, which were
176
  * This function notifies only about those hotkeys, which were
177
    defined by this thread by subfunction 4 of function 66.
177
    defined by this thread by subfunction 4 of function 66.
178
 
178
 
179
======================================================================
179
======================================================================
180
==================== Function 3 - get system time. ===================
180
==================== Function 3 - get system time. ===================
181
======================================================================
181
======================================================================
182
Parameters:
182
Parameters:
183
  * eax = 3 - function number
183
  * eax = 3 - function number
184
Returned value:
184
Returned value:
185
  * eax = 0x00SSMMHH, where HH:MM:SS = Hours:Minutes:Seconds
185
  * eax = 0x00SSMMHH, where HH:MM:SS = Hours:Minutes:Seconds
186
  * each item is BCD-number, for example,
186
  * each item is BCD-number, for example,
187
    for time 23:59:59 function returns 0x00595923
187
    for time 23:59:59 function returns 0x00595923
188
Remarks:
188
Remarks:
189
  * See also subfunction 9 of function 26 - get time from
189
  * See also subfunction 9 of function 26 - get time from
190
    the moment of start of the system; it is more convenient, because
190
    the moment of start of the system; it is more convenient, because
191
    returns simply DWORD-value of the time counter.
191
    returns simply DWORD-value of the time counter.
192
  * System time can be set by function 22.
192
  * System time can be set by function 22.
193
 
193
 
194
======================================================================
194
======================================================================
195
============ Function 4 - draw text string in the window. ============
195
=================== Function 4 - draw text string. ===================
196
======================================================================
196
======================================================================
197
Parameters:
197
Parameters:
198
  * eax = 4 - function number
198
  * eax = 4 - function number
199
  * ebx = [coordinate on axis x]*65536 + [coordinate on axis y]
199
  * ebx = X*65536+Y, coordinates in the window or buffer
200
  * ecx = 0xXYRRGGBB, where
200
  * ecx = 0xXXRRGGBB, where
201
    * RR, GG, BB specify text color
201
    * RR, GG, BB specify text color
202
    * X=ABnn (bits):
202
    * XX = ABFFCSSS (bits):
203
      * nn specifies the used font: 0=system monospaced,
203
      * A=1 - output zero terminated string
204
        1=system font of variable width
204
      * B=1 - fill background (color = edi)
205
      * A=0 - output esi characters, A=1 - output ASCIIZ-string
205
      * FF specifies the font and encoding:
206
      * B=1 - fill background with the color edi
206
        0 = 6x9  cp866
-
 
207
        1 = 8x16 cp866
-
 
208
        2 = 8x16 UTF-16LE
207
    * Y = Cnnn
209
        3 = 8x16 UTF-8
-
 
210
      * C=0 - draw to the window,
208
      * C=1 redirect the output to the user area, specified in edi
211
        C=1 - draw to the user buffer (edi)
209
      * nnn - not used in the current, must be 0 (zero)
212
      * SSS = (size multiplier)-1, so 0 = x1, 7 = x8
210
  * edx = pointer to the beginning of the string
213
  * edx = pointer to the beginning of the string
211
  * esi = for A=0 length of the string, must not exceed 255;
214
  * esi = for A=0 length of the string, for A=1 is ignored
212
          for A=1 is ignored
-
 
213
  * edi = color to fill background, if B=1
215
  * edi = for B=1 color to fill background,
214
  * edi = pointer to user area, for redirect, if C=1
216
          for C=1 pointer to user buffer
215
 
217
 
216
Returned value:
218
Returned value:
217
  * function does not return value
219
  * function does not return value
218
Remarks:
220
Remarks:
219
  * First system font is read out at loading from the file char.mt,
221
  * You can not use B=1 and C=1 at the same time, since both use edi.
220
    second - from char2.mt.
-
 
221
  * Both fonts have height 9 pixels, width of the monospaced font
222
  * When SSS=0, font may be smoothed, depending on system setting.
222
    is equal to 6 pixels.
223
  * User buffer structure:
223
  * C=1, pixel depth = 32 bits, user area is as follows:
-
 
224
    dword Xsize
224
Xsize       dd
225
    dword Ysize
225
Ysize       dd
226
    rest of the area = Xsize * Y size * 4
226
picture     rb  Xsize*Ysize*4  ; 32 bpp
227
  * You can not use B = 1 and C = 1, at the same time. Since in both
-
 
228
    cases, the register edi is used for different purposes.
-
 
229
 
227
 
230
======================================================================
228
======================================================================
231
========================= Function 5 - delay. ========================
229
========================= Function 5 - delay. ========================
232
======================================================================
230
======================================================================
233
Delays execution of the program on the given time.
231
Delays execution of the program on the given time.
234
Parameters:
232
Parameters:
235
  * eax = 5 - function number
233
  * eax = 5 - function number
236
  * ebx = time in the 1/100 of second
234
  * ebx = time in the 1/100 of second
237
Returned value:
235
Returned value:
238
  * function does not return value
236
  * function does not return value
239
Remarks:
237
Remarks:
240
  * Passing ebx=0 does not transfer control to the next process
238
  * Passing ebx=0 does not transfer control to the next process
241
    and does not make any operations at all. If it is really required
239
    and does not make any operations at all. If it is really required
242
    to transfer control to the next process (to complete a current
240
    to transfer control to the next process (to complete a current
243
    time slice), use subfunction 1 of function 68.
241
    time slice), use subfunction 1 of function 68.
244
 
242
 
245
======================================================================
243
======================================================================
246
============== Function 6 - read the file from ramdisk. ==============
-
 
247
======================================================================
-
 
248
Parameters:
-
 
249
  * eax = 6 - function number
-
 
250
  * ebx = pointer to the filename
-
 
251
  * ecx = number of start block, beginning from 1;
-
 
252
    ecx=0 - read from the beginning of the file (same as ecx=1)
-
 
253
  * edx = number of blocks to read;
-
 
254
    edx=0 - read one block (same as edx=1)
-
 
255
  * esi = pointer to memory area for the data
-
 
256
Returned value:
-
 
257
  * eax = file size in bytes, if the file was successfully read
-
 
258
  * eax = -1, if the file was not found
-
 
259
Remarks:
-
 
260
  * This function is out-of-date; function 70 allows
-
 
261
    to fulfil the same operations with the extended possibilities.
-
 
262
  * Block = 512 bytes.
-
 
263
  * For reading all file you can specify the certainly large value
-
 
264
    in edx, for example, edx = -1; but in this case be ready that
-
 
265
    the program will "fall", if the file will appear too large and can
-
 
266
    not be placed in the program memory.
-
 
267
  * The filename must be either in the format 8+3 characters
-
 
268
    (first 8 characters - name itself, last 3 - extension,
-
 
269
    the short names and extensions are supplemented with spaces),
-
 
270
    or in the format 8.3 characters "FILE.EXT"/"FILE.EX "
-
 
271
    (name no more than 8 characters, dot, extension 3 characters
-
 
272
    supplemented if necessary by spaces).
-
 
273
    The filename must be written with capital letters. The terminating
-
 
274
    character with code 0 is not necessary (not ASCIIZ-string).
-
 
275
  * This function does not support folders on the ramdisk.
-
 
276
 
-
 
277
======================================================================
-
 
278
=============== Function 7 - draw image in the window. ===============
244
=============== Function 7 - draw image in the window. ===============
279
======================================================================
245
======================================================================
280
Paramters:
246
Paramters:
281
  * eax = 7 - function number
247
  * eax = 7 - function number
282
  * ebx = pointer to the image in the format BBGGRRBBGGRR...
248
  * ebx = pointer to the image in the format BBGGRRBBGGRR...
283
  * ecx = [size on axis x]*65536 + [size on axis y]
249
  * ecx = [size on axis x]*65536 + [size on axis y]
284
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
250
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
285
Returned value:
251
Returned value:
286
  * function does not return value
252
  * function does not return value
287
Remarks:
253
Remarks:
288
  * Coordinates of the image are coordinates of the upper left corner
254
  * Coordinates of the image are coordinates of the upper left corner
289
    of the image relative to the window.
255
    of the image relative to the window.
290
  * Size of the image in bytes is 3*xsize*ysize.
256
  * Size of the image in bytes is 3*xsize*ysize.
291
 
257
 
292
======================================================================
258
======================================================================
293
=============== Function 8 - define/delete the button. ===============
259
=============== Function 8 - define/delete the button. ===============
294
======================================================================
260
======================================================================
295
Parameters for button definition:
261
Parameters for button definition:
296
  * eax = 8 - function number
262
  * eax = 8 - function number
297
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
263
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
298
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
264
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
299
  * edx = 0xXYnnnnnn, where:
265
  * edx = 0xXYnnnnnn, where:
300
    * nnnnnn = identifier of the button
266
    * nnnnnn = identifier of the button
301
    * high (31st) bit of edx is cleared
267
    * high (31st) bit of edx is cleared
302
    * if 30th bit of edx is set - do not draw the button
268
    * if 30th bit of edx is set - do not draw the button
303
    * if 29th bit of edx is set - do not draw a frame
269
    * if 29th bit of edx is set - do not draw a frame
304
      at pressing the button
270
      at pressing the button
305
  * esi = 0x00RRGGBB - color of the button
271
  * esi = 0x00RRGGBB - color of the button
306
Parameters for button deleting:
272
Parameters for button deleting:
307
  * eax = 8 - function number
273
  * eax = 8 - function number
308
  * edx = 0x80nnnnnn, where nnnnnn - identifier of the button
274
  * edx = 0x80nnnnnn, where nnnnnn - identifier of the button
309
Returned value:
275
Returned value:
310
  * function does not return value
276
  * function does not return value
311
Remarks:
277
Remarks:
312
  * Sizes of the button must be more than 0 and less than 0x8000.
278
  * Sizes of the button must be more than 0 and less than 0x8000.
313
  * For skinned windows definition of the window
279
  * For skinned windows definition of the window
314
    (call of 0th function) creates two standard buttons -
280
    (call of 0th function) creates two standard buttons -
315
    for close of the window with identifier 1 and
281
    for close of the window with identifier 1 and
316
    for minimize of the window with identifier 0xffff.
282
    for minimize of the window with identifier 0xffff.
317
  * The creation of two buttons with same identifiers is admitted.
283
  * The creation of two buttons with same identifiers is admitted.
318
  * The button with the identifier 0xffff at pressing is interpreted
284
  * The button with the identifier 0xffff at pressing is interpreted
319
    by the system as the button of minimization, the system handles
285
    by the system as the button of minimization, the system handles
320
    such pressing independently, not accessing to the application.
286
    such pressing independently, not accessing to the application.
321
    In rest it is usual button.
287
    In rest it is usual button.
322
  * Total number of buttons for all applications is limited to 4095.
288
  * Total number of buttons for all applications is limited to 4095.
323
 
289
 
324
======================================================================
290
======================================================================
325
============ Function 9 - information on execution thread. ===========
291
============ Function 9 - information on execution thread. ===========
326
======================================================================
292
======================================================================
327
Parameters:
293
Parameters:
328
  * eax = 9 - function number
294
  * eax = 9 - function number
329
  * ebx = pointer to 1-Kb buffer
295
  * ebx = pointer to 1-Kb buffer
330
  * ecx = number of the slot of the thread
296
  * ecx = number of the slot of the thread
331
    ecx = -1 - get information on the current thread
297
    ecx = -1 - get information on the current thread
332
Returned value:
298
Returned value:
333
  * eax = maximum number of the slot of a thread
299
  * eax = maximum number of the slot of a thread
334
  * buffer pointed to by ebx contains the following information:
300
  * buffer pointed to by ebx contains the following information:
335
    * +0: dword: usage of the processor (how many time units
301
    * +0: dword: usage of the processor (how many time units
336
      per second leaves on execution of this thread)
302
      per second leaves on execution of this thread)
337
    * +4: word: position of the window of thread in the window stack
303
    * +4: word: position of the window of thread in the window stack
338
    * +6: word: (has no relation to the specified thread)
304
    * +6: word: (has no relation to the specified thread)
339
      number of the thread slot, which window has in the window stack
305
      number of the thread slot, which window has in the window stack
340
      position ecx
306
      position ecx
341
    * +8: word: reserved
307
    * +8: word: reserved
342
    * +10 = +0xA: 11 bytes: name of the process
308
    * +10 = +0xA: 11 bytes: name of the process
343
      (name of the started file - executable file without extension)
309
      (name of the started file - executable file without extension)
344
    * +21 = +0x15: byte: reserved, this byte is not changed
310
    * +21 = +0x15: byte: reserved, this byte is not changed
345
    * +22 = +0x16: dword: address of the process in memory
311
    * +22 = +0x16: dword: address of the process in memory
346
    * +26 = +0x1A: dword: size of used memory - 1
312
    * +26 = +0x1A: dword: size of used memory - 1
347
    * +30 = +0x1E: dword: identifier (PID/TID)
313
    * +30 = +0x1E: dword: identifier (PID/TID)
348
    * +34 = +0x22: dword: coordinate of the thread window on axis x
314
    * +34 = +0x22: dword: coordinate of the thread window on axis x
349
    * +38 = +0x26: dword: coordinate of the thread window on axis y
315
    * +38 = +0x26: dword: coordinate of the thread window on axis y
350
    * +42 = +0x2A: dword: size of the thread window on axis x
316
    * +42 = +0x2A: dword: size of the thread window on axis x
351
    * +46 = +0x2E: dword: size of the thread window on axis y
317
    * +46 = +0x2E: dword: size of the thread window on axis y
352
    * +50 = +0x32: word: status of the thread slot:
318
    * +50 = +0x32: word: status of the thread slot:
353
      * 0 = thread is running
319
      * 0 = thread is running
354
      * 1 = thread is suspended
320
      * 1 = thread is suspended
355
      * 2 = thread is suspended while waiting for event
321
      * 2 = thread is suspended while waiting for event
356
      * 3 = thread is terminating as a result of call to function -1
322
      * 3 = thread is terminating as a result of call to function -1
357
        or under duress as a result of call to subfunction 2
323
        or under duress as a result of call to subfunction 2
358
        of function 18 or termination of the system
324
        of function 18 or termination of the system
359
      * 4 = thread is terminating as a result of exception
325
      * 4 = thread is terminating as a result of exception
360
      * 5 = thread waits for event
326
      * 5 = thread waits for event
361
      * 9 = requested slot is free, all other information on the slot
327
      * 9 = requested slot is free, all other information on the slot
362
        is not meaningful
328
        is not meaningful
363
    * +52 = +0x34: word: reserved, this word is not changed
329
    * +52 = +0x34: word: reserved, this word is not changed
364
    * +54 = +0x36: dword: coordinate of the client area on axis x
330
    * +54 = +0x36: dword: coordinate of the client area on axis x
365
    * +58 = +0x3A: dword: coordinate of the client area on axis y
331
    * +58 = +0x3A: dword: coordinate of the client area on axis y
366
    * +62 = +0x3E: dword: width of the client area
332
    * +62 = +0x3E: dword: width of the client area
367
    * +66 = +0x42: dword: height of the client area
333
    * +66 = +0x42: dword: height of the client area
368
    * +70 = +0x46: byte: state of the window - bitfield
334
    * +70 = +0x46: byte: state of the window - bitfield
369
      * bit 0 (mask 1): window is maximized
335
      * bit 0 (mask 1): window is maximized
370
      * bit 1 (mask 2): window is minimized to panel
336
      * bit 1 (mask 2): window is minimized to panel
371
      * bit 2 (mask 4): window is rolled up
337
      * bit 2 (mask 4): window is rolled up
372
    * +71 = +0x47: dword: event mask
338
    * +71 = +0x47: dword: event mask
373
    * +75 = +0x4B: byte: keyboard mode(ASCII = 0; SCAN = 1)
339
    * +75 = +0x4B: byte: keyboard mode(ASCII = 0; SCAN = 1)
374
Remarks:
340
Remarks:
375
  * Slots are numbered starting from 1.
341
  * Slots are numbered starting from 1.
376
  * Returned value is not a total number of threads, because there
342
  * Returned value is not a total number of threads, because there
377
    can be free slots.
343
    can be free slots.
378
  * When process is starting, system automatically creates
344
  * When process is starting, system automatically creates
379
    execution thread.
345
    execution thread.
380
  * Function gives information on the thread. Each process has
346
  * Function gives information on the thread. Each process has
381
    at least one thread. One process can create many threads,
347
    at least one thread. One process can create many threads,
382
    in this case each thread has its own slot and the fields
348
    in this case each thread has its own slot and the fields
383
    +10, +22, +26 in these slots coincide.
349
    +10, +22, +26 in these slots coincide.
384
    Applications have no common way to define whether two threads
350
    Applications have no common way to define whether two threads
385
    belong to one process.
351
    belong to one process.
386
  * The active window - window on top of the window stack -
352
  * The active window - window on top of the window stack -
387
    receives the messages on a keyboard input. For such window
353
    receives the messages on a keyboard input. For such window
388
    the position in the window stack coincides with returned value.
354
    the position in the window stack coincides with returned value.
389
  * Slot 1 corresponds to special system thread, for which:
355
  * Slot 1 corresponds to special system thread, for which:
390
    * the window is in the bottom of the window stack, the fields
356
    * the window is in the bottom of the window stack, the fields
391
      +4 and +6 contain value 1
357
      +4 and +6 contain value 1
392
    * name of the process - "OS/IDLE" (supplemented by spaces)
358
    * name of the process - "OS/IDLE" (supplemented by spaces)
393
    * address of the process in memory is 0, size of used memory is
359
    * address of the process in memory is 0, size of used memory is
394
      16 Mb (0x1000000)
360
      16 Mb (0x1000000)
395
    * PID=1
361
    * PID=1
396
    * coordinates and sizes of the window and the client area are by
362
    * coordinates and sizes of the window and the client area are by
397
      convention set to 0
363
      convention set to 0
398
    * status of the slot is always 0 (running)
364
    * status of the slot is always 0 (running)
399
    * the execution time adds of time leaving on operations itself
365
    * the execution time adds of time leaving on operations itself
400
      and idle time in waiting for interrupt (which can be got by call
366
      and idle time in waiting for interrupt (which can be got by call
401
      to subfunction 4 of function 18).
367
      to subfunction 4 of function 18).
402
  * Beginning from slot 2, the normal applications are placed.
368
  * Beginning from slot 2, the normal applications are placed.
403
  * The normal applications are placed in memory at the address
369
  * The normal applications are placed in memory at the address
404
    0 (kernel constant 'std_application_base_address').
370
    0 (kernel constant 'std_application_base_address').
405
    There is no intersection, as each process has its own page table.
371
    There is no intersection, as each process has its own page table.
406
  * At creation of the thread it is assigned the slot
372
  * At creation of the thread it is assigned the slot
407
    in the system table and identifier (Process/Thread IDentifier =
373
    in the system table and identifier (Process/Thread IDentifier =
408
    PID/TID), which do not vary with time for given thread.
374
    PID/TID), which do not vary with time for given thread.
409
    After completion of the thread its slot can be anew used
375
    After completion of the thread its slot can be anew used
410
    for another thread. The thread identifier can not be assigned
376
    for another thread. The thread identifier can not be assigned
411
    to other thread even after completion of this thread.
377
    to other thread even after completion of this thread.
412
    Identifiers, assigned to new threads, grow monotonously.
378
    Identifiers, assigned to new threads, grow monotonously.
413
  * If the thread has not yet defined the window by call to
379
  * If the thread has not yet defined the window by call to
414
    function 0, the position and the sizes
380
    function 0, the position and the sizes
415
    of its window are considered to be zero.
381
    of its window are considered to be zero.
416
  * Coordinates of the client area are relative to the window.
382
  * Coordinates of the client area are relative to the window.
417
  * At the moment only the part of the buffer by a size
383
  * At the moment only the part of the buffer by a size
418
    76 = 0x4C bytes is used. Nevertheless it is recommended to use
384
    76 = 0x4C bytes is used. Nevertheless it is recommended to use
419
    1-Kb buffer for the future compatibility, in the future
385
    1-Kb buffer for the future compatibility, in the future
420
    some fields can be added.
386
    some fields can be added.
421
 
387
 
422
======================================================================
388
======================================================================
423
==================== Function 10 - wait for event. ===================
389
==================== Function 10 - wait for event. ===================
424
======================================================================
390
======================================================================
425
If the message queue is empty, waits for appearance of the message
391
If the message queue is empty, waits for appearance of the message
426
in queue. In this state thread does not consume CPU time.
392
in queue. In this state thread does not consume CPU time.
427
Then reads out the message from queue.
393
Then reads out the message from queue.
428
 
394
 
429
Parameters:
395
Parameters:
430
  * eax = 10 - function number
396
  * eax = 10 - function number
431
Returned value:
397
Returned value:
432
  * eax = event (see the list of events)
398
  * eax = event (see the list of events)
433
Remarks:
399
Remarks:
434
  * Those events are taken into account only which enter into
400
  * Those events are taken into account only which enter into
435
    a mask set by function 40. By default it is
401
    a mask set by function 40. By default it is
436
    redraw, key and button events.
402
    redraw, key and button events.
437
  * To check, whether there is a message in queue, use function 11.
403
  * To check, whether there is a message in queue, use function 11.
438
    To wait for no more than given time, use function 23.
404
    To wait for no more than given time, use function 23.
439
 
405
 
440
======================================================================
406
======================================================================
441
=============== Function 11 - check for event, no wait. ==============
407
=============== Function 11 - check for event, no wait. ==============
442
======================================================================
408
======================================================================
443
If the message queue contains event, function reads out
409
If the message queue contains event, function reads out
444
and return it. If the queue is empty, function returns 0.
410
and return it. If the queue is empty, function returns 0.
445
Parameters:
411
Parameters:
446
  * eax = 11 - function number
412
  * eax = 11 - function number
447
Returned value:
413
Returned value:
448
  * eax = 0 - message queue is empty
414
  * eax = 0 - message queue is empty
449
  * else eax = event (see the list of events)
415
  * else eax = event (see the list of events)
450
Remarks:
416
Remarks:
451
  * Those events are taken into account only, which enter into
417
  * Those events are taken into account only, which enter into
452
    a mask set by function 40. By default it is
418
    a mask set by function 40. By default it is
453
    redraw, key and button events.
419
    redraw, key and button events.
454
  * To wait for event, use function 10.
420
  * To wait for event, use function 10.
455
    To wait for no more than given time, use function 23.
421
    To wait for no more than given time, use function 23.
456
 
422
 
457
======================================================================
423
======================================================================
458
=============== Function 12 - begin/end window redraw. ===============
424
=============== Function 12 - begin/end window redraw. ===============
459
======================================================================
425
======================================================================
460
 
426
 
461
---------------- Subfunction 1 - begin window redraw. ----------------
427
---------------- Subfunction 1 - begin window redraw. ----------------
462
Parameters:
428
Parameters:
463
  * eax = 12 - function number
429
  * eax = 12 - function number
464
  * ebx = 1 - subfunction number
430
  * ebx = 1 - subfunction number
465
Returned value:
431
Returned value:
466
  * function does not return value
432
  * function does not return value
467
 
433
 
468
----------------- Subfunction 2 - end window redraw. -----------------
434
----------------- Subfunction 2 - end window redraw. -----------------
469
Parameters:
435
Parameters:
470
  * eax = 12 - function number
436
  * eax = 12 - function number
471
  * ebx = 2 - subfunction number
437
  * ebx = 2 - subfunction number
472
Returned value:
438
Returned value:
473
  * function does not return value
439
  * function does not return value
474
Remarks:
440
Remarks:
475
  * Subfunction 1 deletes all buttons defined with
441
  * Subfunction 1 deletes all buttons defined with
476
    function 8, they must be defined again.
442
    function 8, they must be defined again.
477
 
443
 
478
======================================================================
444
======================================================================
479
============ Function 13 - draw a rectangle in the window. ===========
445
============ Function 13 - draw a rectangle in the window. ===========
480
======================================================================
446
======================================================================
481
Parameters:
447
Parameters:
482
  * eax = 13 - function number
448
  * eax = 13 - function number
483
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
449
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
484
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
450
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
485
  * edx = color 0xRRGGBB or 0x80RRGGBB for gradient fill
451
  * edx = color 0xRRGGBB or 0x80RRGGBB for gradient fill
486
Returned value:
452
Returned value:
487
  * function does not return value
453
  * function does not return value
488
Remarks:
454
Remarks:
489
  * Coordinates are understood as coordinates of the left upper corner
455
  * Coordinates are understood as coordinates of the left upper corner
490
    of a rectangle relative to the window.
456
    of a rectangle relative to the window.
491
 
457
 
492
======================================================================
458
======================================================================
493
=================== Function 14 - get screen size. ===================
459
=================== Function 14 - get screen size. ===================
494
======================================================================
460
======================================================================
495
Parameters:
461
Parameters:
496
  * eax = 14 - function number
462
  * eax = 14 - function number
497
Returned value:
463
Returned value:
498
  * eax = [xsize]*65536 + [ysize], where
464
  * eax = [xsize]*65536 + [ysize], where
499
  * xsize = x-coordinate of the right lower corner of the screen =
465
  * xsize = x-coordinate of the right lower corner of the screen =
500
            horizontal size - 1
466
            horizontal size - 1
501
  * ysize = y-coordinate of the right lower corner of the screen =
467
  * ysize = y-coordinate of the right lower corner of the screen =
502
            vertical size - 1
468
            vertical size - 1
503
Remarks:
469
Remarks:
504
  * See also subfunction 5 of function 48 - get sizes of
470
  * See also subfunction 5 of function 48 - get sizes of
505
    working area of the screen.
471
    working area of the screen.
506
 
472
 
507
======================================================================
473
======================================================================
508
== Function 15, subfunction 1 - set a size of the background image. ==
474
== Function 15, subfunction 1 - set a size of the background image. ==
509
======================================================================
475
======================================================================
510
Parameters:
476
Parameters:
511
  * eax = 15 - function number
477
  * eax = 15 - function number
512
  * ebx = 1 - subfunction number
478
  * ebx = 1 - subfunction number
513
  * ecx = width of the image
479
  * ecx = width of the image
514
  * edx = height of the image
480
  * edx = height of the image
515
Returned value:
481
Returned value:
516
  * function does not return value
482
  * function does not return value
517
Remarks:
483
Remarks:
518
  * Before calling subfunctions 2 and 5 you should call this function
484
  * Before calling subfunctions 2 and 5 you should call this function
519
    to set image size!
485
    to set image size!
520
  * For update of the screen (after completion of a series of commands
486
  * For update of the screen (after completion of a series of commands
521
    working with a background) call subfunction 3.
487
    working with a background) call subfunction 3.
522
  * There is a pair function for get size of the background image -
488
  * There is a pair function for get size of the background image -
523
    subfunction 1 of function 39.
489
    subfunction 1 of function 39.
524
 
490
 
525
======================================================================
491
======================================================================
526
=== Function 15, subfunction 2 - put pixel on the background image. ==
492
=== Function 15, subfunction 2 - put pixel on the background image. ==
527
======================================================================
493
======================================================================
528
Parameters:
494
Parameters:
529
  * eax = 15 - function number
495
  * eax = 15 - function number
530
  * ebx = 2 - subfunction number
496
  * ebx = 2 - subfunction number
531
  * ecx = offset
497
  * ecx = offset
532
  * edx = color of a pixel 0xRRGGBB
498
  * edx = color of a pixel 0xRRGGBB
533
Returned value:
499
Returned value:
534
  * function does not return value
500
  * function does not return value
535
Remarks:
501
Remarks:
536
  * Offset for a pixel with coordinates (x,y) is calculated as
502
  * Offset for a pixel with coordinates (x,y) is calculated as
537
    (x+y*xsize)*3.
503
    (x+y*xsize)*3.
538
  * If the given offset exceeds size set by subfunction 1,
504
  * If the given offset exceeds size set by subfunction 1,
539
    the call is ignored.
505
    the call is ignored.
540
  * For update of the screen (after completion of a series of commands
506
  * For update of the screen (after completion of a series of commands
541
    working with a background) call subfunction 3.
507
    working with a background) call subfunction 3.
542
  * There is a pair function for get pixel on the background image -
508
  * There is a pair function for get pixel on the background image -
543
    subfunction 2 of function 39.
509
    subfunction 2 of function 39.
544
 
510
 
545
======================================================================
511
======================================================================
546
=========== Function 15, subfunction 3 - redraw background. ==========
512
=========== Function 15, subfunction 3 - redraw background. ==========
547
======================================================================
513
======================================================================
548
Parameters:
514
Parameters:
549
  * eax = 15 - function number
515
  * eax = 15 - function number
550
  * ebx = 3 - subfunction number
516
  * ebx = 3 - subfunction number
551
Returned value:
517
Returned value:
552
  * function does not return value
518
  * function does not return value
553
 
519
 
554
======================================================================
520
======================================================================
555
== Function 15, subfunction 4 - set drawing mode for the background. =
521
== Function 15, subfunction 4 - set drawing mode for the background. =
556
======================================================================
522
======================================================================
557
Parameters:
523
Parameters:
558
  * eax = 15 - function number
524
  * eax = 15 - function number
559
  * ebx = 4 - subfunction number
525
  * ebx = 4 - subfunction number
560
  * ecx = drawing mode:
526
  * ecx = drawing mode:
561
    * 1 = tile
527
    * 1 = tile
562
    * 2 = stretch
528
    * 2 = stretch
563
Returned value:
529
Returned value:
564
  * function does not return value
530
  * function does not return value
565
Remarks:
531
Remarks:
566
  * For update of the screen (after completion of a series of commands
532
  * For update of the screen (after completion of a series of commands
567
    working with a background) call subfunction 3.
533
    working with a background) call subfunction 3.
568
  * There is a pair function for get drawing mode of the background -
534
  * There is a pair function for get drawing mode of the background -
569
    subfunction 4 of function 39.
535
    subfunction 4 of function 39.
570
 
536
 
571
======================================================================
537
======================================================================
572
===================== Function 15, subfunction 5 =====================
538
===================== Function 15, subfunction 5 =====================
573
============ Put block of pixels on the background image. ============
539
============ Put block of pixels on the background image. ============
574
======================================================================
540
======================================================================
575
Parameters:
541
Parameters:
576
  * eax = 15 - function number
542
  * eax = 15 - function number
577
  * ebx = 5 - subfunction number
543
  * ebx = 5 - subfunction number
578
  * ecx = pointer to the data in the format BBGGRRBBGGRR...
544
  * ecx = pointer to the data in the format BBGGRRBBGGRR...
579
  * edx = offset in data of the background image
545
  * edx = offset in data of the background image
580
  * esi = size of data in bytes = 3 * number of pixels
546
  * esi = size of data in bytes = 3 * number of pixels
581
Returned value:
547
Returned value:
582
  * function does not return value
548
  * function does not return value
583
Remarks:
549
Remarks:
584
  * Offset and size are not checked for correctness.
550
  * Offset and size are not checked for correctness.
585
  * Color of each pixel is stored as 3-bytes value BBGGRR.
551
  * Color of each pixel is stored as 3-bytes value BBGGRR.
586
  * Pixels of the background image are written sequentially
552
  * Pixels of the background image are written sequentially
587
    from left to right, from up to down.
553
    from left to right, from up to down.
588
  * Offset of pixel with coordinates (x,y) is (x+y*xsize)*3.
554
  * Offset of pixel with coordinates (x,y) is (x+y*xsize)*3.
589
  * For update of the screen (after completion of a series of commands
555
  * For update of the screen (after completion of a series of commands
590
    working with a background) call subfunction 3.
556
    working with a background) call subfunction 3.
591
 
557
 
592
======================================================================
558
======================================================================
593
===================== Function 15, subfunction 6 =====================
559
===================== Function 15, subfunction 6 =====================
594
======== Map background data to the address space of process. ========
560
======== Map background data to the address space of process. ========
595
======================================================================
561
======================================================================
596
Parameters:
562
Parameters:
597
  * eax = 15 - function number
563
  * eax = 15 - function number
598
  * ebx = 6 - subfunction number
564
  * ebx = 6 - subfunction number
599
Returned value:
565
Returned value:
600
  * eax = pointer to background data, 0 if error
566
  * eax = pointer to background data, 0 if error
601
Remarks:
567
Remarks:
602
  * Mapped data are available for read and write.
568
  * Mapped data are available for read and write.
603
  * Size of background data is 3*xsize*ysize. The system blocks
569
  * Size of background data is 3*xsize*ysize. The system blocks
604
    changes of background sizes while process works with mapped data.
570
    changes of background sizes while process works with mapped data.
605
  * Color of each pixel is stored as 3-bytes value BBGGRR.
571
  * Color of each pixel is stored as 3-bytes value BBGGRR.
606
  * Pixels of the background image are written sequentially
572
  * Pixels of the background image are written sequentially
607
    from left to right, from up to down.
573
    from left to right, from up to down.
608
 
574
 
609
======================================================================
575
======================================================================
610
===== Function 15, subfunction 7 - close mapped background data. =====
576
===== Function 15, subfunction 7 - close mapped background data. =====
611
======================================================================
577
======================================================================
612
Parameters:
578
Parameters:
613
  * eax = 15 - function number
579
  * eax = 15 - function number
614
  * ebx = 7 - subfunction number
580
  * ebx = 7 - subfunction number
615
  * ecx = pointer to mapped data
581
  * ecx = pointer to mapped data
616
Returned value:
582
Returned value:
617
  * eax = 1 - success, 0 - error
583
  * eax = 1 - success, 0 - error
618
 
584
 
619
======================================================================
585
======================================================================
620
===================== Function 15, subfunction 8 =====================
586
===================== Function 15, subfunction 8 =====================
621
============= Get coordinates of last draw the background ============
587
============= Get coordinates of last draw the background ============
622
======================================================================
588
======================================================================
623
Parameters:
589
Parameters:
624
  * eax = 15 - function number
590
  * eax = 15 - function number
625
  * ebx = 8 - subfunction number
591
  * ebx = 8 - subfunction number
626
Returned value:
592
Returned value:
627
  * eax = [left]*65536 + [right]
593
  * eax = [left]*65536 + [right]
628
  * ebx = [top]*65536 + [bottom]
594
  * ebx = [top]*65536 + [bottom]
629
Remarks:
595
Remarks:
630
  * (left,top) are coordinates of the left upper corner,
596
  * (left,top) are coordinates of the left upper corner,
631
    (right,bottom) are coordinates of the right lower one.
597
    (right,bottom) are coordinates of the right lower one.
632
  * For receiving more reliable information, call the function
598
  * For receiving more reliable information, call the function
633
    immediately after the event:
599
    immediately after the event:
634
             5 = kernel finished redrawing of the desktop background
600
             5 = kernel finished redrawing of the desktop background
635
 
601
 
636
======================================================================
602
======================================================================
637
===================== Function 15, subfunction 9 =====================
603
===================== Function 15, subfunction 9 =====================
638
============= Redraws a rectangular part of the background ===========
604
============= Redraws a rectangular part of the background ===========
639
======================================================================
605
======================================================================
640
Parameters:
606
Parameters:
641
  * eax = 15 - function number
607
  * eax = 15 - function number
642
  * ebx = 9 - subfunction number
608
  * ebx = 9 - subfunction number
643
  * ecx = [left]*65536 + [right]
609
  * ecx = [left]*65536 + [right]
644
  * edx = [top]*65536 + [bottom]
610
  * edx = [top]*65536 + [bottom]
645
Returned value:
611
Returned value:
646
  * function does not return value
612
  * function does not return value
647
Remarks:
613
Remarks:
648
  * (left,top) are coordinates of the left upper corner,
614
  * (left,top) are coordinates of the left upper corner,
649
    (right,bottom) are coordinates of the right lower one.
615
    (right,bottom) are coordinates of the right lower one.
650
  * If parameters are set incorrectly then background is not redrawn.
616
  * If parameters are set incorrectly then background is not redrawn.
651
 
617
 
652
======================================================================
618
======================================================================
653
=============== Function 16 - save ramdisk on a floppy. ==============
619
=============== Function 16 - save ramdisk on a floppy. ==============
654
======================================================================
620
======================================================================
655
Parameters:
621
Parameters:
656
  * eax = 16 - function number
622
  * eax = 16 - function number
657
  * ebx = 1 or ebx = 2 - on which floppy save
623
  * ebx = 1 or ebx = 2 - on which floppy save
658
Returned value:
624
Returned value:
659
  * eax = 0 - success
625
  * eax = 0 - success
660
  * eax = 1 - error
626
  * eax = 1 - error
661
 
627
 
662
======================================================================
628
======================================================================
663
======= Function 17 - get the identifier of the pressed button. ======
629
======= Function 17 - get the identifier of the pressed button. ======
664
======================================================================
630
======================================================================
665
Takes away the code of the pressed button from the buffer.
631
Takes away the code of the pressed button from the buffer.
666
Parameters:
632
Parameters:
667
  * eax = 17 - function number
633
  * eax = 17 - function number
668
Returned value:
634
Returned value:
669
  * if the buffer is empty, function returns eax=1
635
  * if the buffer is empty, function returns eax=1
670
  * if the buffer is not empty:
636
  * if the buffer is not empty:
671
    * high 24 bits of eax contain button identifier (in particular,
637
    * high 24 bits of eax contain button identifier (in particular,
672
      ah contains low byte of the identifier; if all buttons have
638
      ah contains low byte of the identifier; if all buttons have
673
      the identifier less than 256, ah is enough to distinguish)
639
      the identifier less than 256, ah is enough to distinguish)
674
    * al = 0 - the button was pressed with left mouse button
640
    * al = 0 - the button was pressed with left mouse button
675
    * al = bit corresponding to used mouse button otherwise
641
    * al = bit corresponding to used mouse button otherwise
676
Remarks:
642
Remarks:
677
  * "Buffer" keeps only one button, at pressing the new button the
643
  * "Buffer" keeps only one button, at pressing the new button the
678
    information about old is lost.
644
    information about old is lost.
679
  * The call of this function by an application with inactive window
645
  * The call of this function by an application with inactive window
680
    will return answer "buffer is empty".
646
    will return answer "buffer is empty".
681
  * Returned value for al corresponds to the state of mouse buttons
647
  * Returned value for al corresponds to the state of mouse buttons
682
    as in subfunction 2 of function 37 at the beginning
648
    as in subfunction 2 of function 37 at the beginning
683
    of button press, excluding lower bit, which is cleared.
649
    of button press, excluding lower bit, which is cleared.
684
 
650
 
685
======================================================================
651
======================================================================
686
===================== Function 18, subfunction 1 =====================
652
===================== Function 18, subfunction 1 =====================
687
============= Make deactive the window of the given thread. ==========
653
============= Make deactive the window of the given thread. ==========
688
======================================================================
654
======================================================================
689
Parameters:
655
Parameters:
690
  * eax = 18 - function number
656
  * eax = 18 - function number
691
  * ebx = 1 - subfunction number
657
  * ebx = 1 - subfunction number
692
  * ecx = number of the thread slot
658
  * ecx = number of the thread slot
693
Returned value:
659
Returned value:
694
  * function does not return value
660
  * function does not return value
695
 
661
 
696
======================================================================
662
======================================================================
697
= Function 18, subfunction 2 - terminate process/thread by the slot. =
663
= Function 18, subfunction 2 - terminate process/thread by the slot. =
698
======================================================================
664
======================================================================
699
Parameters:
665
Parameters:
700
  * eax = 18 - function number
666
  * eax = 18 - function number
701
  * ebx = 2 - subfunction number
667
  * ebx = 2 - subfunction number
702
  * ecx = number of the slot of process/thread
668
  * ecx = number of the slot of process/thread
703
Returned value:
669
Returned value:
704
  * function does not return value
670
  * function does not return value
705
Remarks:
671
Remarks:
706
  * It is impossible to terminate system thread OS/IDLE (with
672
  * It is impossible to terminate system thread OS/IDLE (with
707
    number of the slot 1),
673
    number of the slot 1),
708
    it is possible to terminate any normal process/thread.
674
    it is possible to terminate any normal process/thread.
709
  * See also subfunction 18 - terminate
675
  * See also subfunction 18 - terminate
710
    process/thread by the identifier.
676
    process/thread by the identifier.
711
 
677
 
712
======================================================================
678
======================================================================
713
===================== Function 18, subfunction 3 =====================
679
===================== Function 18, subfunction 3 =====================
714
============= Make active the window of the given thread. ============
680
============= Make active the window of the given thread. ============
715
======================================================================
681
======================================================================
716
Parameters:
682
Parameters:
717
  * eax = 18 - function number
683
  * eax = 18 - function number
718
  * ebx = 3 - subfunction number
684
  * ebx = 3 - subfunction number
719
  * ecx = number of the thread slot
685
  * ecx = number of the thread slot
720
Returned value:
686
Returned value:
721
  * function does not return value
687
  * function does not return value
722
Remarks:
688
Remarks:
723
  * If correct, but nonexistent slot is given,
689
  * If correct, but nonexistent slot is given,
724
    some window is made active.
690
    some window is made active.
725
  * To find out, which window is active, use subfunction 7.
691
  * To find out, which window is active, use subfunction 7.
726
 
692
 
727
======================================================================
693
======================================================================
728
===================== Function 18, subfunction 4 =====================
694
===================== Function 18, subfunction 4 =====================
729
=========== Get counter of idle time units per one second. ===========
695
=========== Get counter of idle time units per one second. ===========
730
======================================================================
696
======================================================================
731
Idle time units are units, in which the processor stands idle
697
Idle time units are units, in which the processor stands idle
732
in waiting for interrupt (in the command 'hlt').
698
in waiting for interrupt (in the command 'hlt').
733
 
699
 
734
Parameters:
700
Parameters:
735
  * eax = 18 - function number
701
  * eax = 18 - function number
736
  * ebx = 4 - subfunction number
702
  * ebx = 4 - subfunction number
737
Returned value:
703
Returned value:
738
  * eax = value of the counter of idle time units per one second
704
  * eax = value of the counter of idle time units per one second
739
 
705
 
740
======================================================================
706
======================================================================
741
========== Function 18, subfunction 5 - get CPU clock rate. ==========
707
========== Function 18, subfunction 5 - get CPU clock rate. ==========
742
======================================================================
708
======================================================================
743
Parameters:
709
Parameters:
744
  * eax = 18 - function number
710
  * eax = 18 - function number
745
  * ebx = 5 - subfunction number
711
  * ebx = 5 - subfunction number
746
Returned value:
712
Returned value:
747
  * eax = clock rate (modulo 2^32 clock ticks = 4GHz)
713
  * eax = clock rate (modulo 2^32 clock ticks = 4GHz)
748
 
714
 
749
======================================================================
715
======================================================================
750
 Function 18, subfunction 6 - save ramdisk to the file on hard drive.
716
 Function 18, subfunction 6 - save ramdisk to the file on hard drive.
751
======================================================================
717
======================================================================
752
Parameters:
718
Parameters:
753
  * eax = 18 - function number
719
  * eax = 18 - function number
754
  * ebx = 6 - subfunction number
720
  * ebx = 6 - subfunction number
755
  * ecx = pointer to the full path to file
721
  * ecx = pointer to the full path to file
756
    (for example, "/hd0/1/kolibri/kolibri.img")
722
    (for example, "/hd0/1/kolibri/kolibri.img")
757
Returned value:
723
Returned value:
758
  * eax = 0 - success
724
  * eax = 0 - success
759
  * else eax = error code of the file system
725
  * else eax = error code of the file system
760
Remarks:
726
Remarks:
761
  * All folders in the given path must exist, otherwise function
727
  * All folders in the given path must exist, otherwise function
762
    returns value 5, "file not found".
728
    returns value 5, "file not found".
763
 
729
 
764
======================================================================
730
======================================================================
765
=========== Function 18, subfunction 7 - get active window. ==========
731
=========== Function 18, subfunction 7 - get active window. ==========
766
======================================================================
732
======================================================================
767
Parameters:
733
Parameters:
768
  * eax = 18 - function number
734
  * eax = 18 - function number
769
  * ebx = 7 - subfunction number
735
  * ebx = 7 - subfunction number
770
Returned value:
736
Returned value:
771
  * eax = number of the active window
737
  * eax = number of the active window
772
    (number of the slot of the thread with active window)
738
    (number of the slot of the thread with active window)
773
Remarks:
739
Remarks:
774
  * Active window is at the top of the window stack and receives
740
  * Active window is at the top of the window stack and receives
775
    messages on all keyboard input.
741
    messages on all keyboard input.
776
  * To make a window active, use subfunction 3.
742
  * To make a window active, use subfunction 3.
777
 
743
 
778
======================================================================
744
======================================================================
779
== Function 18, subfunction 8 - disable/enable the internal speaker. =
745
== Function 18, subfunction 8 - disable/enable the internal speaker. =
780
======================================================================
746
======================================================================
781
If speaker sound is disabled, all calls to subfunction 55 of
747
If speaker sound is disabled, all calls to subfunction 55 of
782
function 55 are ignored. If speaker sound is enabled,
748
function 55 are ignored. If speaker sound is enabled,
783
they are routed on builtin speaker.
749
they are routed on builtin speaker.
784
 
750
 
785
------------------- Subsubfunction 1 - get status. -------------------
751
------------------- Subsubfunction 1 - get status. -------------------
786
Parameters:
752
Parameters:
787
  * eax = 18 - function number
753
  * eax = 18 - function number
788
  * ebx = 8 - subfunction number
754
  * ebx = 8 - subfunction number
789
  * ecx = 1 - number of the subsubfunction
755
  * ecx = 1 - number of the subsubfunction
790
Returned value:
756
Returned value:
791
  * eax = 0 - speaker sound is enabled; 1 - disabled
757
  * eax = 0 - speaker sound is enabled; 1 - disabled
792
 
758
 
793
----------------- Subsubfunction 2 - toggle status. ------------------
759
----------------- Subsubfunction 2 - toggle status. ------------------
794
Toggles states of disable/enable.
760
Toggles states of disable/enable.
795
Parameters:
761
Parameters:
796
  * eax = 18 - function number
762
  * eax = 18 - function number
797
  * ebx = 8 - subfunction number
763
  * ebx = 8 - subfunction number
798
  * ecx = 2 - number of the subsubfunction
764
  * ecx = 2 - number of the subsubfunction
799
Returned value:
765
Returned value:
800
  * function does not return value
766
  * function does not return value
801
 
767
 
802
======================================================================
768
======================================================================
803
== Function 18, subfunction 9 - system shutdown with the parameter. ==
769
== Function 18, subfunction 9 - system shutdown with the parameter. ==
804
======================================================================
770
======================================================================
805
Parameters:
771
Parameters:
806
  * eax = 18 - function number
772
  * eax = 18 - function number
807
  * ebx = 9 - subfunction number
773
  * ebx = 9 - subfunction number
808
  * ecx = parameter:
774
  * ecx = parameter:
809
    * 2 = turn off computer
775
    * 2 = turn off computer
810
    * 3 = reboot computer
776
    * 3 = reboot computer
811
    * 4 = restart the kernel from the file 'kernel.mnt' on ramdisk
777
    * 4 = restart the kernel from the file 'kernel.mnt' on ramdisk
812
Returned value:
778
Returned value:
813
  * at incorrect ecx the registers do not change (i.e. eax=18)
779
  * at incorrect ecx the registers do not change (i.e. eax=18)
814
  * by correct call function always returns eax=0
780
  * by correct call function always returns eax=0
815
    as the tag of success
781
    as the tag of success
816
Remarks:
782
Remarks:
817
  * Do not rely on returned value by incorrect call, it can be
783
  * Do not rely on returned value by incorrect call, it can be
818
    changed in future versions of the kernel.
784
    changed in future versions of the kernel.
819
 
785
 
820
======================================================================
786
======================================================================
821
======= Function 18, subfunction 10 - minimize topmost window. =======
787
======= Function 18, subfunction 10 - minimize topmost window. =======
822
======================================================================
788
======================================================================
823
Minimizes the topmost (active) window.
789
Minimizes the topmost (active) window.
824
Parameters:
790
Parameters:
825
  * eax = 18 - function number
791
  * eax = 18 - function number
826
  * ebx = 10 - subfunction number
792
  * ebx = 10 - subfunction number
827
Returned value:
793
Returned value:
828
  * function does not return value
794
  * function does not return value
829
Remarks:
795
Remarks:
830
  * The minimized window from the point of view of function 9
796
  * The minimized window from the point of view of function 9
831
    keeps position and sizes.
797
    keeps position and sizes.
832
  * Restoring of an application window occurs at its activation by
798
  * Restoring of an application window occurs at its activation by
833
    subfunction 3.
799
    subfunction 3.
834
  * Usually there is no necessity to minimize/restore a window
800
  * Usually there is no necessity to minimize/restore a window
835
    explicitly: minimization of a window is carried out by the system
801
    explicitly: minimization of a window is carried out by the system
836
    at pressing the minimization button (for skinned windows
802
    at pressing the minimization button (for skinned windows
837
    it is defined automatically by function 0,
803
    it is defined automatically by function 0,
838
    for other windows it can be defined manually by function 8),
804
    for other windows it can be defined manually by function 8),
839
    restore of a window is done by the application '@taskbar'.
805
    restore of a window is done by the application '@taskbar'.
840
 
806
 
841
======================================================================
807
======================================================================
842
 Function 18, subfunction 11 - get information on the disk subsystem.
808
 Function 18, subfunction 11 - get information on the disk subsystem.
843
======================================================================
809
======================================================================
844
Parameters:
810
Parameters:
845
  * eax = 18 - function number
811
  * eax = 18 - function number
846
  * ebx = 11 - subfunction number
812
  * ebx = 11 - subfunction number
847
  * ecx = type of the table:
813
  * ecx = type of the table:
848
    * 1 = short version, 16 bytes
814
    * 1 = short version, 16 bytes
849
  * edx = pointer to the buffer (in the application) for the table
815
  * edx = pointer to the buffer (in the application) for the table
850
Returned value:
816
Returned value:
851
  * function does not return value
817
  * function does not return value
852
Format of the table: short version:
818
Format of the table: short version:
853
  * +0: byte: information about FDD's (drives for floppies),
819
  * +0: byte: information about FDD's (drives for floppies),
854
    AAAABBBB, where AAAA gives type of the first drive, BBBB -
820
    AAAABBBB, where AAAA gives type of the first drive, BBBB -
855
    of the second regarding to the following list:
821
    of the second regarding to the following list:
856
    * 0 = there is no drive
822
    * 0 = there is no drive
857
    * 1 = 360Kb, 5.25''
823
    * 1 = 360Kb, 5.25''
858
    * 2 = 1.2Mb, 5.25''
824
    * 2 = 1.2Mb, 5.25''
859
    * 3 = 720Kb, 3.5''
825
    * 3 = 720Kb, 3.5''
860
    * 4 = 1.44Mb, 3.5''
826
    * 4 = 1.44Mb, 3.5''
861
    * 5 = 2.88Mb, 3.5'' (such drives are not used anymore)
827
    * 5 = 2.88Mb, 3.5'' (such drives are not used anymore)
862
    For example, for the standard configuration from one 1.44-drive
828
    For example, for the standard configuration from one 1.44-drive
863
    here will be 40h, and for the case 1.2Mb on A: and 1.44Mb on B:
829
    here will be 40h, and for the case 1.2Mb on A: and 1.44Mb on B:
864
    the value is 24h.
830
    the value is 24h.
865
    
831
    
866
  First IDE controller:
832
  First IDE controller:
867
  * +1: byte: information about hard disks and CD-drives, AABBCCDD,
833
  * +1: byte: information about hard disks and CD-drives, AABBCCDD,
868
    where AA corresponds to the controller IDE0, ..., DD - IDE3:
834
    where AA corresponds to the controller IDE0, ..., DD - IDE3:
869
    * 0 = device not found
835
    * 0 = device not found
870
    * 1 = hard drive
836
    * 1 = hard drive
871
    * 2 = CD-drive
837
    * 2 = CD-drive
872
    For example, in the case HD on IDE0 and CD on IDE2
838
    For example, in the case HD on IDE0 and CD on IDE2
873
    this field contains 48h.
839
    this field contains 48h.
874
  * +2: 4 db: number of the retrieved partitions on hard disks
840
  * +2: 4 db: number of the retrieved partitions on hard disks
875
    at accordingly IDE0,...,IDE3.
841
    at accordingly IDE0,...,IDE3.
876
    
842
    
877
  Second IDE controller:
843
  Second IDE controller:
878
  * +6: byte: information about hard disks and CD-drives, AABBCCDD,
844
  * +6: byte: information about hard disks and CD-drives, AABBCCDD,
879
    where AA corresponds to the controller IDE4, ..., DD - IDE7:
845
    where AA corresponds to the controller IDE4, ..., DD - IDE7:
880
    * 0 = device not found
846
    * 0 = device not found
881
    * 1 = hard drive
847
    * 1 = hard drive
882
    * 2 = CD-drive
848
    * 2 = CD-drive
883
    For example, in the case HD on IDE4 and CD on IDE6
849
    For example, in the case HD on IDE4 and CD on IDE6
884
    this field contains 48h.
850
    this field contains 48h.
885
  * +7: 4 db: number of the retrieved partitions on hard disks
851
  * +7: 4 db: number of the retrieved partitions on hard disks
886
    at accordingly IDE4,...,IDE7.
852
    at accordingly IDE4,...,IDE7.
887
 
853
 
888
  Third IDE controller:
854
  Third IDE controller:
889
  * +11: byte: information about hard disks and CD-drives, AABBCCDD,
855
  * +11: byte: information about hard disks and CD-drives, AABBCCDD,
890
    where AA corresponds to the controller IDE8, ..., DD - IDE11:
856
    where AA corresponds to the controller IDE8, ..., DD - IDE11:
891
    * 0 = device not found
857
    * 0 = device not found
892
    * 1 = hard drive
858
    * 1 = hard drive
893
    * 2 = CD-drive
859
    * 2 = CD-drive
894
    For example, in the case HD on IDE8 and CD on IDE10
860
    For example, in the case HD on IDE8 and CD on IDE10
895
    this field contains 48h.
861
    this field contains 48h.
896
  * +12: 4 db: number of the retrieved partitions on hard disks
862
  * +12: 4 db: number of the retrieved partitions on hard disks
897
    at accordingly IDE8,...,IDE11.   
863
    at accordingly IDE8,...,IDE11.   
898
    
864
    
899
    If the hard disk on IDEx is absent, appropriate byte is zero,
865
    If the hard disk on IDEx is absent, appropriate byte is zero,
900
    otherwise it shows number of the recognized partitions, which
866
    otherwise it shows number of the recognized partitions, which
901
    can be not presented (if the drive is not formatted or if
867
    can be not presented (if the drive is not formatted or if
902
    the file system is not supported). Current version of the kernel
868
    the file system is not supported). Current version of the kernel
903
    supports only FAT12/16/32, NTFS, ext2/3/4 and XFS for hard disks.
869
    supports only FAT12/16/32, NTFS, ext2/3/4 and XFS for hard disks.
904
 
870
 
905
Remarks:
871
Remarks:
906
  * The table can be used for obtaining the information about
872
  * The table can be used for obtaining the information about
907
    available devices.
873
    available devices.
908
 
874
 
909
======================================================================
875
======================================================================
910
========== Function 18, subfunction 13 - get kernel version. =========
876
========== Function 18, subfunction 13 - get kernel version. =========
911
======================================================================
877
======================================================================
912
Parameters:
878
Parameters:
913
  * eax = 18 - function number
879
  * eax = 18 - function number
914
  * ebx = 13 - subfunction number
880
  * ebx = 13 - subfunction number
915
  * ecx = pointer to the buffer (not less than 16 bytes), where
881
  * ecx = pointer to the buffer (not less than 16 bytes), where
916
    the information will be placed
882
    the information will be placed
917
Returned value:
883
Returned value:
918
  * function does not return value
884
  * function does not return value
919
Structure of the buffer:
885
Structure of the buffer:
920
db a,b,c,d for version a.b.c.d
886
db a,b,c,d for version a.b.c.d
921
db 0: reserved
887
db 0: reserved
922
dd REV - kernel SVN revision number
888
dd REV - kernel SVN revision number
923
For Kolibri 0.7.7.0+ kernel:
889
For Kolibri 0.7.7.0+ kernel:
924
db 0,7,7,0
890
db 0,7,7,0
925
db 0
891
db 0
926
dd 1675
892
dd 1675
927
 
893
 
928
======================================================================
894
======================================================================
929
======= Function 18, subfunction 14 - wait for screen retrace. =======
895
======= Function 18, subfunction 14 - wait for screen retrace. =======
930
======================================================================
896
======================================================================
931
Waits for the beginning of retrace of the scanning ray of the screen
897
Waits for the beginning of retrace of the scanning ray of the screen
932
monitor.
898
monitor.
933
Parameters:
899
Parameters:
934
  * eax = 18 - function number
900
  * eax = 18 - function number
935
  * ebx = 14 - subfunction number
901
  * ebx = 14 - subfunction number
936
Returned value:
902
Returned value:
937
  * eax = 0 as the tag of success
903
  * eax = 0 as the tag of success
938
Remarks:
904
Remarks:
939
  * Function is intended only for active high-efficiency graphics
905
  * Function is intended only for active high-efficiency graphics
940
    applications; is used for smooth output of a graphics.
906
    applications; is used for smooth output of a graphics.
941
 
907
 
942
======================================================================
908
======================================================================
943
== Function 18, subfunction 15 - center mouse cursor on the screen. ==
909
== Function 18, subfunction 15 - center mouse cursor on the screen. ==
944
======================================================================
910
======================================================================
945
Parameters:
911
Parameters:
946
  * eax = 18 - function number
912
  * eax = 18 - function number
947
  * ebx = 15 - subfunction number
913
  * ebx = 15 - subfunction number
948
Returned value:
914
Returned value:
949
  * eax = 0 as the tag of success
915
  * eax = 0 as the tag of success
950
 
916
 
951
======================================================================
917
======================================================================
952
========= Function 18, subfunction 16 - get size of free RAM. ========
918
========= Function 18, subfunction 16 - get size of free RAM. ========
953
======================================================================
919
======================================================================
954
Parameters:
920
Parameters:
955
  * eax = 18 - function number
921
  * eax = 18 - function number
956
  * ebx = 16 - subfunction number
922
  * ebx = 16 - subfunction number
957
Returned value:
923
Returned value:
958
  * eax = size of free memory in kilobytes
924
  * eax = size of free memory in kilobytes
959
 
925
 
960
======================================================================
926
======================================================================
961
======== Function 18, subfunction 17 - get full amount of RAM. =======
927
======== Function 18, subfunction 17 - get full amount of RAM. =======
962
======================================================================
928
======================================================================
963
Parameters:
929
Parameters:
964
  * eax = 18 - function number
930
  * eax = 18 - function number
965
  * ebx = 17 - subfunction number
931
  * ebx = 17 - subfunction number
966
Returned value:
932
Returned value:
967
  * eax = total size of existing memory in kilobytes
933
  * eax = total size of existing memory in kilobytes
968
 
934
 
969
======================================================================
935
======================================================================
970
===================== Function 18, subfunction 18 ====================
936
===================== Function 18, subfunction 18 ====================
971
============= Terminate process/thread by the identifier. ============
937
============= Terminate process/thread by the identifier. ============
972
======================================================================
938
======================================================================
973
Parameters:
939
Parameters:
974
  * eax = 18 - function number
940
  * eax = 18 - function number
975
  * ebx = 18 - subfunction number
941
  * ebx = 18 - subfunction number
976
  * ecx = identifer of process/thread (PID/TID)
942
  * ecx = identifer of process/thread (PID/TID)
977
Returned value:
943
Returned value:
978
  * eax = 0 - success
944
  * eax = 0 - success
979
  * eax = -1 - error (process is not found or is system)
945
  * eax = -1 - error (process is not found or is system)
980
Remarks:
946
Remarks:
981
  * It is impossible to terminate system thread OS/IDLE (identifier
947
  * It is impossible to terminate system thread OS/IDLE (identifier
982
    1), it is possible to terminate any normal process/thread.
948
    1), it is possible to terminate any normal process/thread.
983
  * See also subfunction 2 - terminate
949
  * See also subfunction 2 - terminate
984
    process/thread by given slot.
950
    process/thread by given slot.
985
 
951
 
986
======================================================================
952
======================================================================
987
======== Function 18, subfunction 19 - get/set mouse features. =======
953
======== Function 18, subfunction 19 - get/set mouse features. =======
988
======================================================================
954
======================================================================
989
 
955
 
990
---------------- Subsubfunction 0 - get mouse speed. -----------------
956
---------------- Subsubfunction 0 - get mouse speed. -----------------
991
Parameters:
957
Parameters:
992
  * eax = 18 - function number
958
  * eax = 18 - function number
993
  * ebx = 19 - subfunction number
959
  * ebx = 19 - subfunction number
994
  * ecx = 0 - subsubfunction number
960
  * ecx = 0 - subsubfunction number
995
Returned value:
961
Returned value:
996
  * eax = current mouse speed
962
  * eax = current mouse speed
997
 
963
 
998
---------------- Subsubfunction 1 - set mouse speed. -----------------
964
---------------- Subsubfunction 1 - set mouse speed. -----------------
999
Parameters:
965
Parameters:
1000
  * eax = 18 - function number
966
  * eax = 18 - function number
1001
  * ebx = 19 - subfunction number
967
  * ebx = 19 - subfunction number
1002
  * ecx = 1 - subsubfunction number
968
  * ecx = 1 - subsubfunction number
1003
  * edx = new value for speed
969
  * edx = new value for speed
1004
Returned value:
970
Returned value:
1005
  * function does not return value
971
  * function does not return value
-
 
972
 
-
 
973
Remark: recommended speed = 1, 0 = lock the cursor.
1006
 
974
 
1007
---------------- Subsubfunction 2 - get mouse delay. -----------------
975
------------- Subsubfunction 2 - get mouse acceleration. -------------
1008
Parameters:
976
Parameters:
1009
  * eax = 18 - function number
977
  * eax = 18 - function number
1010
  * ebx = 19 - subfunction number
978
  * ebx = 19 - subfunction number
1011
  * ecx = 2 - subsubfunction number
979
  * ecx = 2 - subsubfunction number
1012
Returned value:
980
Returned value:
1013
  * eax = current mouse delay
981
  * eax = 0 - off, 1 - slight, 2 - medium, 3 - intense
1014
 
982
 
1015
---------------- Subsubfunction 3 - set mouse delay. -----------------
983
------------- Subsubfunction 3 - set mouse acceleration. -------------
1016
Parameters:
984
Parameters:
1017
  * eax = 18 - function number
985
  * eax = 18 - function number
1018
  * ebx = 19 - subfunction number
986
  * ebx = 19 - subfunction number
1019
  * ecx = 3 - subsubfunction number
987
  * ecx = 3 - subsubfunction number
1020
  * edx = new value for mouse delay
988
  * edx = 0 - off, 1 - slight, 2 - medium, 3 - intense
1021
Returned value:
989
Returned value:
1022
  * function does not return value
990
  * function does not return value
1023
 
991
 
1024
----------- Subsubfunction 4 - set mouse pointer position. -----------
992
----------- Subsubfunction 4 - set mouse pointer position. -----------
1025
Parameters:
993
Parameters:
1026
  * eax = 18 - function number
994
  * eax = 18 - function number
1027
  * ebx = 19 - subfunction number
995
  * ebx = 19 - subfunction number
1028
  * ecx = 4 - subsubfunction number
996
  * ecx = 4 - subsubfunction number
1029
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
997
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1030
Returned value:
998
Returned value:
1031
  * function does not return value
999
  * function does not return value
1032
 
1000
 
1033
-------- Subsubfunction 5 - simulate state of mouse buttons. ---------
1001
-------- Subsubfunction 5 - simulate state of mouse buttons. ---------
1034
Parameters:
1002
Parameters:
1035
  * eax = 18 - function number
1003
  * eax = 18 - function number
1036
  * ebx = 19 - subfunction number
1004
  * ebx = 19 - subfunction number
1037
  * ecx = 5 - subsubfunction number
1005
  * ecx = 5 - subsubfunction number
1038
  * edx = information about emulated state of mouse buttons:
1006
  * edx = information about emulated state of mouse buttons:
1039
    (same as return value in subfunction 2 of function 37)
1007
    (same as return value in subfunction 2 of function 37)
1040
    * bit 0 is set = left button is pressed
1008
    * bit 0 is set = left button is pressed
1041
    * bit 1 is set = right button is pressed
1009
    * bit 1 is set = right button is pressed
1042
    * bit 2 is set = middle button is pressed
1010
    * bit 2 is set = middle button is pressed
1043
    * bit 3 is set = 4th button is pressed
1011
    * bit 3 is set = 4th button is pressed
1044
    * bit 4 is set = 5th button is pressed
1012
    * bit 4 is set = 5th button is pressed
1045
Returned value:
1013
Returned value:
1046
  * function does not return value
1014
  * function does not return value
1047
Remarks:
1015
 
1048
  * It is recommended to set speed of the mouse (in subsubfunction 1)
1016
-------------- Subsubfunction 6 - get doubleclick delay. -------------
-
 
1017
Parameters:
1049
    from 1 up to 9. The installed value is not inspected by the kernel
1018
  * eax = 18 - function number
1050
    code, so set it carefully, at incorrect value the cursor
1019
  * ebx = 19 - subfunction number
1051
    can "freeze". Speed of the mouse can be regulated through the
1020
  * ecx = 6 - subsubfunction number
1052
    application SETUP.
1021
Returned value:
1053
  * Recommended delay of the mouse (in subsubfunction 3) = 10. Lower
1022
  * eax = current doubleclick delay (100 = 1 second)
-
 
1023
 
1054
    value is not handled by COM mice. At the very large values the
1024
-------------- Subsubfunction 7 - set doubleclick delay. -------------
-
 
1025
Parameters:
1055
    movement of the mouse on 1 pixel is impossible and the cursor will
1026
  * eax = 18 - function number
1056
    jump on the value of installed speed (subsubfunction 1). The
1027
  * ebx = 19 - subfunction number
1057
    installed value is not inspected by the kernel code.
1028
  * ecx = 7 - subsubfunction number
1058
    Mouse delay can be regulated through the application SETUP.
1029
  * dl  = new value for doubleclick delay (100 = 1 second)
1059
  * The subsubfunction 4 does not check the passed value. Before
1030
Returned value:
1060
    its call find out current screen resolution (with function 14)
1031
  * function does not return value
-
 
1032
 
1061
    and check that the value of position is inside the limits of the
1033
Remark: mouse settings can be modified in the application mouse_cfg.
1062
    screen.
-
 
1063
 
1034
 
1064
======================================================================
1035
======================================================================
1065
======== Function 18, subfunction 20 - get information on RAM. =======
1036
======== Function 18, subfunction 20 - get information on RAM. =======
1066
======================================================================
1037
======================================================================
1067
Parameters:
1038
Parameters:
1068
  * eax = 18 - function number
1039
  * eax = 18 - function number
1069
  * ebx = 20 - subfunction number
1040
  * ebx = 20 - subfunction number
1070
  * ecx = pointer to the buffer for information (36 bytes)
1041
  * ecx = pointer to the buffer for information (36 bytes)
1071
Returned value:
1042
Returned value:
1072
  * eax = total size of existing RAM in pages
1043
  * eax = total size of existing RAM in pages
1073
    or -1 if error has occured
1044
    or -1 if error has occured
1074
  * buffer pointed to by ecx contains the following information:
1045
  * buffer pointed to by ecx contains the following information:
1075
    * +0:  dword: total size of existing RAM in pages
1046
    * +0:  dword: total size of existing RAM in pages
1076
    * +4:  dword: size of free RAM in pages
1047
    * +4:  dword: size of free RAM in pages
1077
    * +8:  dword: number of page faults (exceptions #PF)
1048
    * +8:  dword: number of page faults (exceptions #PF)
1078
                 in applications
1049
                 in applications
1079
    * +12: dword: size of kernel heap in bytes
1050
    * +12: dword: size of kernel heap in bytes
1080
    * +16: dword: free in kernel heap in bytes
1051
    * +16: dword: free in kernel heap in bytes
1081
    * +20: dword: total number of memory blocks in kernel heap
1052
    * +20: dword: total number of memory blocks in kernel heap
1082
    * +24: dword: number of free memory blocks in kernel heap
1053
    * +24: dword: number of free memory blocks in kernel heap
1083
    * +28: dword: size of maximum free block in kernel heap
1054
    * +28: dword: size of maximum free block in kernel heap
1084
                 (reserved)
1055
                 (reserved)
1085
    * +32: dword: size of maximum allocated block in kernel heap
1056
    * +32: dword: size of maximum allocated block in kernel heap
1086
                 (reserved)
1057
                 (reserved)
1087
 
1058
 
1088
======================================================================
1059
======================================================================
1089
===================== Function 18, subfunction 21 ====================
1060
===================== Function 18, subfunction 21 ====================
1090
======== Get slot number of process/thread by the identifier. ========
1061
======== Get slot number of process/thread by the identifier. ========
1091
======================================================================
1062
======================================================================
1092
Parameters:
1063
Parameters:
1093
  * eax = 18 - function number
1064
  * eax = 18 - function number
1094
  * ebx = 21 - subfunction number
1065
  * ebx = 21 - subfunction number
1095
  * ecx = identifer of process/thread (PID/TID)
1066
  * ecx = identifer of process/thread (PID/TID)
1096
Returned value:
1067
Returned value:
1097
  * eax = 0 - error (invalid identifier)
1068
  * eax = 0 - error (invalid identifier)
1098
  * otherwise eax = slot number
1069
  * otherwise eax = slot number
1099
 
1070
 
1100
======================================================================
1071
======================================================================
1101
===================== Function 18, subfunction 22 ====================
1072
===================== Function 18, subfunction 22 ====================
1102
============== Operations with window of another thread. =============
1073
============== Operations with window of another thread. =============
1103
======================================================================
1074
======================================================================
1104
Parameters:
1075
Parameters:
1105
  * eax = 18 - function number
1076
  * eax = 18 - function number
1106
  * ebx = 22 - subfunction number
1077
  * ebx = 22 - subfunction number
1107
  * ecx = operation type:
1078
  * ecx = operation type:
1108
    * 0 = minimize window of the thread with given slot number
1079
    * 0 = minimize window of the thread with given slot number
1109
    * 1 = minimize window of the thread with given identifier
1080
    * 1 = minimize window of the thread with given identifier
1110
    * 2 = restore window of the thread with given slot number
1081
    * 2 = restore window of the thread with given slot number
1111
    * 3 = restore window of the thread with given identifier
1082
    * 3 = restore window of the thread with given identifier
1112
  * edx = parameter (slot number or PID/TID)
1083
  * edx = parameter (slot number or PID/TID)
1113
Returned value:
1084
Returned value:
1114
  * eax = 0 - success
1085
  * eax = 0 - success
1115
  * eax = -1 - error (invalid identifier)
1086
  * eax = -1 - error (invalid identifier)
1116
Remarks:
1087
Remarks:
1117
  * The thread can minimize its window with subfunction 10.
1088
  * The thread can minimize its window with subfunction 10.
1118
  * One can restore and activate window simultaneously with
1089
  * One can restore and activate window simultaneously with
1119
    subfunction 3 (which requires slot number).
1090
    subfunction 3 (which requires slot number).
1120
 
1091
 
1121
======================================================================
1092
======================================================================
1122
======== Function 18, subfunction 23 - minimize all windows. ==========
1093
======== Function 18, subfunction 23 - minimize all windows. ==========
1123
======================================================================
1094
======================================================================
1124
Parameters:
1095
Parameters:
1125
  * eax = 18 - function number
1096
  * eax = 18 - function number
1126
  * ebx = 23 - subfunction number
1097
  * ebx = 23 - subfunction number
1127
Returned value:
1098
Returned value:
1128
  * eax = 0 - all windows have been minimized before a function call
1099
  * eax = 0 - all windows have been minimized before a function call
1129
  * eax = N - number of windows minimized from function
1100
  * eax = N - number of windows minimized from function
1130
Remarks:
1101
Remarks:
1131
  * Window of special thread (name begin to symbol @) is not minimize.
1102
  * Window of special thread (name begin to symbol @) is not minimize.
1132
 
1103
 
1133
======================================================================
1104
======================================================================
1134
======= Function 18, subfunction 24 - set limits of screen. ==========
1105
======= Function 18, subfunction 24 - set limits of screen. ==========
1135
======================================================================
1106
======================================================================
1136
Parameters:
1107
Parameters:
1137
  * eax = 18 - function number
1108
  * eax = 18 - function number
1138
  * ebx = 24 - subfunction number
1109
  * ebx = 24 - subfunction number
1139
  * ecx = new X size
1110
  * ecx = new X size
1140
  * edx = new Y size
1111
  * edx = new Y size
1141
Returned value:
1112
Returned value:
1142
  * function does not return value
1113
  * function does not return value
1143
Remarks:
1114
Remarks:
1144
  * The function does not change the physical size of the video mode.
1115
  * The function does not change the physical size of the video mode.
1145
    It is designed for non-standard displays which display the image
1116
    It is designed for non-standard displays which display the image
1146
    partially.
1117
    partially.
1147
  * The sizes specified in the function should not exceed the sizes
1118
  * The sizes specified in the function should not exceed the sizes
1148
    of the current video mode, otherwise the function will not change
1119
    of the current video mode, otherwise the function will not change
1149
    anything.
1120
    anything.
1150
 
1121
 
1151
======================================================================
1122
======================================================================
-
 
1123
===================== Function 18, subfunction 25 ====================
-
 
1124
===== Control position of the window relative to other windows. ======
-
 
1125
======================================================================
-
 
1126
 
-
 
1127
------------- Subsubfunction 1 - get position  -----------------------
-
 
1128
Parameters:
-
 
1129
  * eax = 18 - function number
-
 
1130
  * ebx = 25 - subfunction number
-
 
1131
  * ecx = 1 - subsubfunction number
-
 
1132
  * edx = -1(for current window) or PID application
-
 
1133
Returned value:
-
 
1134
  * eax = one of the constants window position
-
 
1135
 
-
 
1136
------------- Subsubfunction 2 - set position  -----------------------
-
 
1137
Parameters:
-
 
1138
  * eax = 18 - function number
-
 
1139
  * ebx = 25 - subfunction number
-
 
1140
  * ecx = 2 - subsubfunction number
-
 
1141
  * edx = -1(for current window) or PID application
-
 
1142
  * esi = new window position (one of the constants below)
-
 
1143
Returned value:
-
 
1144
  * eax = 0 - error
-
 
1145
  * eax = 1 - success
-
 
1146
 
-
 
1147
Constant position of the window relative to other windows:
-
 
1148
 ZPOS_DESKTOP     = -2 - on the background
-
 
1149
 ZPOS_ALWAYS_BACK = -1 - behind all the windows
-
 
1150
 ZPOS_NORMAL      = 0  - normal
-
 
1151
 ZPOS_ALWAYS_TOP  = 1  - on top of all windows
-
 
1152
 
-
 
1153
======================================================================
1152
==================== Function 20 - MIDI interface. ===================
1154
==================== Function 20 - MIDI interface. ===================
1153
======================================================================
1155
======================================================================
1154
 
1156
 
1155
----------------------- Subfunction 1 - reset ------------------------
1157
----------------------- Subfunction 1 - reset ------------------------
1156
Parameters:
1158
Parameters:
1157
  * eax = 20 - function number
1159
  * eax = 20 - function number
1158
  * ebx = 1 - subfunction number
1160
  * ebx = 1 - subfunction number
1159
 
1161
 
1160
-------------------- Subfunction 2 - output byte ---------------------
1162
-------------------- Subfunction 2 - output byte ---------------------
1161
Parameters:
1163
Parameters:
1162
  * eax = 20 - function number
1164
  * eax = 20 - function number
1163
  * ebx = 2 - subfunction number
1165
  * ebx = 2 - subfunction number
1164
  * cl = byte for output
1166
  * cl = byte for output
1165
Returned value (is the same for both subfunctions):
1167
Returned value (is the same for both subfunctions):
1166
  * eax = 0 - success
1168
  * eax = 0 - success
1167
  * eax = 1 - base port is not defined
1169
  * eax = 1 - base port is not defined
1168
Remarks:
1170
Remarks:
1169
  * Previously the base port must be defined by
1171
  * Previously the base port must be defined by
1170
    subfunction 1 of function 21.
1172
    subfunction 1 of function 21.
1171
 
1173
 
1172
======================================================================
1174
======================================================================
1173
======== Function 21, subfunction 1 - set MPU MIDI base port. ========
1175
======== Function 21, subfunction 1 - set MPU MIDI base port. ========
1174
======================================================================
1176
======================================================================
1175
Parameters:
1177
Parameters:
1176
  * eax = 21 - function number
1178
  * eax = 21 - function number
1177
  * ebx = 1 - subfunction number
1179
  * ebx = 1 - subfunction number
1178
  * ecx = number of base port
1180
  * ecx = number of base port
1179
Returned value
1181
Returned value
1180
  * eax = 0 - success
1182
  * eax = 0 - success
1181
  * eax = -1 - erratic number of a port
1183
  * eax = -1 - erratic number of a port
1182
Remarks:
1184
Remarks:
1183
  * Number of a port must satisfy to conditions 0x100<=ecx<=0xFFFF.
1185
  * Number of a port must satisfy to conditions 0x100<=ecx<=0xFFFF.
1184
  * The installation of base is necessary for function 20.
1186
  * The installation of base is necessary for function 20.
1185
  * To get base port use subfunction 1 of function 26.
1187
  * To get base port use subfunction 1 of function 26.
1186
 
1188
 
1187
======================================================================
1189
======================================================================
1188
========== Function 21, subfunction 2 - set keyboard layout. =========
1190
========== Function 21, subfunction 2 - set keyboard layout. =========
1189
======================================================================
1191
======================================================================
1190
Keyboard layout is used to convert keyboard scancodes to ASCII-codes,
1192
Keyboard layout is used to convert keyboard scancodes to ASCII-codes,
1191
which will be read by function 2.
1193
which will be read by function 2.
1192
Parameters:
1194
Parameters:
1193
  * eax = 21 - function number
1195
  * eax = 21 - function number
1194
  * ebx = 2 - subfunction number
1196
  * ebx = 2 - subfunction number
1195
  * ecx = which layout to set:
1197
  * ecx = which layout to set:
1196
    * 1 = normal layout
1198
    * 1 = normal layout
1197
    * 2 = layout at pressed Shift
1199
    * 2 = layout at pressed Shift
1198
    * 3 = layout at pressed Alt
1200
    * 3 = layout at pressed Alt
1199
  * edx = pointer to layout - table of length 128 bytes
1201
  * edx = pointer to layout - table of length 128 bytes
1200
Or:
1202
Or:
1201
  * ecx = 9
1203
  * ecx = 9
1202
  * dx = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1204
  * dx = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1203
Returned value:
1205
Returned value:
1204
  * eax = 0 - success
1206
  * eax = 0 - success
1205
  * eax = 1 - incorrect parameter
1207
  * eax = 1 - incorrect parameter
1206
Remarks:
1208
Remarks:
1207
  * If Alt is pressed, the layout with Alt is used;
1209
  * If Alt is pressed, the layout with Alt is used;
1208
    if Alt is not pressed, but Shift is pressed,
1210
    if Alt is not pressed, but Shift is pressed,
1209
    the layout with Shift is used;
1211
    the layout with Shift is used;
1210
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1212
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1211
    layout is used and then from the code is subtracted 0x60;
1213
    layout is used and then from the code is subtracted 0x60;
1212
    if no control key is pressed, the normal layout is used.
1214
    if no control key is pressed, the normal layout is used.
1213
  * To get layout and country identifier use
1215
  * To get layout and country identifier use
1214
    subfunction 2 of function 26.
1216
    subfunction 2 of function 26.
1215
  * Country identifier is global system variable, which is not used
1217
  * Country identifier is global system variable, which is not used
1216
    by the kernel itself; however the application '@taskbar' displays
1218
    by the kernel itself; however the application '@taskbar' displays
1217
    the corresponding icon.
1219
    the corresponding icon.
1218
  * The application @taskbar switches layouts on user request.
1220
  * The application @taskbar switches layouts on user request.
1219
 
1221
 
1220
======================================================================
1222
======================================================================
1221
========== Function 21, subfunction 5 - set system language. =========
1223
========== Function 21, subfunction 5 - set system language. =========
1222
======================================================================
1224
======================================================================
1223
Parameters:
1225
Parameters:
1224
  * eax = 21 - function number
1226
  * eax = 21 - function number
1225
  * ebx = 5 - subfunction number
1227
  * ebx = 5 - subfunction number
1226
  * ecx = system language (1=eng, 2=fi, 3=ger, 4=rus)
1228
  * ecx = system language (1=eng, 2=fi, 3=ger, 4=rus)
1227
Returned value:
1229
Returned value:
1228
  * eax = 0
1230
  * eax = 0
1229
Remarks:
1231
Remarks:
1230
  * System language is global system variable and is not used
1232
  * System language is global system variable and is not used
1231
    by the kernel itself, however application @taskbar draws the
1233
    by the kernel itself, however application @taskbar draws the
1232
    appropriate icon.
1234
    appropriate icon.
1233
  * Function does not check for correctness, as the kernel does not
1235
  * Function does not check for correctness, as the kernel does not
1234
    use this variable.
1236
    use this variable.
1235
  * To get system language use subfunction 5 of function 26.
1237
  * To get system language use subfunction 5 of function 26.
1236
 
1238
 
1237
======================================================================
1239
======================================================================
1238
 Function 21, subfunction 11 - enable/disable low-level access to HD.
1240
 Function 21, subfunction 11 - enable/disable low-level access to HD.
1239
======================================================================
1241
======================================================================
1240
Parameters:
1242
Parameters:
1241
  * eax = 21 - function number
1243
  * eax = 21 - function number
1242
  * ebx = 11 - subfunction number
1244
  * ebx = 11 - subfunction number
1243
  * ecx = 0/1 - disable/enable
1245
  * ecx = 0/1 - disable/enable
1244
Returned value:
1246
Returned value:
1245
  * eax = 0
1247
  * eax = 0
1246
Remarks:
1248
Remarks:
1247
  * Is used in LBA-read (subfunction 8 of function 58).
1249
  * Is used in LBA-read (subfunction 8 of function 58).
1248
  * The current implementation uses only low bit of ecx.
1250
  * The current implementation uses only low bit of ecx.
1249
  * To get current status use subfunction 11 of function 26.
1251
  * To get current status use subfunction 11 of function 26.
1250
 
1252
 
1251
======================================================================
1253
======================================================================
1252
 Function 21, subfunction 12 - enable/disable low-level access to PCI.
1254
 Function 21, subfunction 12 - enable/disable low-level access to PCI.
1253
======================================================================
1255
======================================================================
1254
Parameters:
1256
Parameters:
1255
  * eax = 21 - function number
1257
  * eax = 21 - function number
1256
  * ebx = 12 - subfunction number
1258
  * ebx = 12 - subfunction number
1257
  * ecx = 0/1 - disable/enable
1259
  * ecx = 0/1 - disable/enable
1258
Returned value:
1260
Returned value:
1259
  * eax = 0
1261
  * eax = 0
1260
Remarks:
1262
Remarks:
1261
  * Is used in operations with PCI bus (function 62).
1263
  * Is used in operations with PCI bus (function 62).
1262
  * The current implementation uses only low bit of ecx.
1264
  * The current implementation uses only low bit of ecx.
1263
  * To get current status use subfunction 12 of function 26.
1265
  * To get current status use subfunction 12 of function 26.
1264
 
1266
 
1265
======================================================================
1267
======================================================================
1266
================= Function 22 - set system date/time. ================
1268
================= Function 22 - set system date/time. ================
1267
======================================================================
1269
======================================================================
1268
Parameters:
1270
Parameters:
1269
  * eax = 22 - function number
1271
  * eax = 22 - function number
1270
  * ebx = 0 - set time
1272
  * ebx = 0 - set time
1271
    * ecx = 0x00SSMMHH - time in the binary-decimal code (BCD):
1273
    * ecx = 0x00SSMMHH - time in the binary-decimal code (BCD):
1272
    * HH=hour 00..23
1274
    * HH=hour 00..23
1273
    * MM=minute 00..59
1275
    * MM=minute 00..59
1274
    * SS=second 00..59
1276
    * SS=second 00..59
1275
  * ebx = 1 - set date
1277
  * ebx = 1 - set date
1276
    * ecx = 0x00DDMMYY - date in the binary-decimal code (BCD):
1278
    * ecx = 0x00DDMMYY - date in the binary-decimal code (BCD):
1277
    * DD=day 01..31
1279
    * DD=day 01..31
1278
    * MM=month 01..12
1280
    * MM=month 01..12
1279
    * YY=year 00..99
1281
    * YY=year 00..99
1280
  * ebx = 2 - set day of week
1282
  * ebx = 2 - set day of week
1281
    * ecx = 1 for Sunday, ..., 7 for Saturday
1283
    * ecx = 1 for Sunday, ..., 7 for Saturday
1282
  * ebx = 3 - set alarm clock
1284
  * ebx = 3 - set alarm clock
1283
    * ecx = 0x00SSMMHH
1285
    * ecx = 0x00SSMMHH
1284
Returned value:
1286
Returned value:
1285
  * eax = 0 - success
1287
  * eax = 0 - success
1286
  * eax = 1 - incorrect parameter
1288
  * eax = 1 - incorrect parameter
1287
  * eax = 2 - CMOS-battery was unloaded
1289
  * eax = 2 - CMOS-battery was unloaded
1288
Remarks:
1290
Remarks:
1289
  * Value of installation of day of week seems to be doubtful,
1291
  * Value of installation of day of week seems to be doubtful,
1290
    as it a little where is used
1292
    as it a little where is used
1291
    (day of week can be calculated by date).
1293
    (day of week can be calculated by date).
1292
  * Alarm clock can be set on operation in the given time every day.
1294
  * Alarm clock can be set on operation in the given time every day.
1293
    But there is no existing system function to disable it.
1295
    But there is no existing system function to disable it.
1294
  * Operation of alarm clock consists in generation IRQ8.
1296
  * Operation of alarm clock consists in generation IRQ8.
1295
  * Generally CMOS supports for alarm clock set of value 0xFF
1297
  * Generally CMOS supports for alarm clock set of value 0xFF
1296
    as one of parameters and it means that the appropriate parameter
1298
    as one of parameters and it means that the appropriate parameter
1297
    is ignored. But current implementation does not allow this
1299
    is ignored. But current implementation does not allow this
1298
    (will return 1).
1300
    (will return 1).
1299
  * Alarm clock is a global system resource; the set of
1301
  * Alarm clock is a global system resource; the set of
1300
    an alarm clock cancels automatically the previous set.
1302
    an alarm clock cancels automatically the previous set.
1301
    However, at moment no program uses it.
1303
    However, at moment no program uses it.
1302
 
1304
 
1303
======================================================================
1305
======================================================================
1304
============= Function 23 - wait for event with timeout. =============
1306
============= Function 23 - wait for event with timeout. =============
1305
======================================================================
1307
======================================================================
1306
If the message queue is empty, waits for new message in the queue,
1308
If the message queue is empty, waits for new message in the queue,
1307
but no more than given time. Then reads out a message from the queue.
1309
but no more than given time. Then reads out a message from the queue.
1308
 
1310
 
1309
Parameters:
1311
Parameters:
1310
  * eax = 23 - function number
1312
  * eax = 23 - function number
1311
  * ebx = timeout (in 1/100 of second)
1313
  * ebx = timeout (in 1/100 of second)
1312
Returned value:
1314
Returned value:
1313
  * eax = 0 - the message queue is empty
1315
  * eax = 0 - the message queue is empty
1314
  * otherwise eax = event (see the list of events)
1316
  * otherwise eax = event (see the list of events)
1315
Remarks:
1317
Remarks:
1316
  * Only those events are taken into account, which enter into
1318
  * Only those events are taken into account, which enter into
1317
    the mask set by function 40. By default it is
1319
    the mask set by function 40. By default it is
1318
    redraw, key and button events.
1320
    redraw, key and button events.
1319
  * To check for presence of a message in the queue use function 11.
1321
  * To check for presence of a message in the queue use function 11.
1320
    To wait without timeout use function 10.
1322
    To wait without timeout use function 10.
1321
  * Transmission ebx=0 results in immediate returning eax=0.
1323
  * Transmission ebx=0 results in immediate returning eax=0.
1322
  * Current implementation returns immediately with eax=0,
1324
  * Current implementation returns immediately with eax=0,
1323
    if the addition of ebx with the current value of time counter
1325
    if the addition of ebx with the current value of time counter
1324
    makes 32-bit overflow.
1326
    makes 32-bit overflow.
1325
 
1327
 
1326
======================================================================
1328
======================================================================
1327
======= Function 24, subfunction 4 - eject tray of disk drive. =======
1329
======= Function 24, subfunction 4 - eject tray of disk drive. =======
1328
======================================================================
1330
======================================================================
1329
Parameters:
1331
Parameters:
1330
  * eax = 24 - function number
1332
  * eax = 24 - function number
1331
  * ebx = 4 - subfunction number
1333
  * ebx = 4 - subfunction number
1332
  * ecx = position of CD/DVD-drive
1334
  * ecx = position of CD/DVD-drive
1333
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1335
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1334
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1336
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1335
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1337
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1336
Returned value:
1338
Returned value:
1337
  * function does not return value
1339
  * function does not return value
1338
Remarks:
1340
Remarks:
1339
  * The function is supported only for ATAPI devices (CD and DVD).
1341
  * The function is supported only for ATAPI devices (CD and DVD).
1340
  * When the tray is being ejected,
1342
  * When the tray is being ejected,
1341
    manual control of tray is unlocked.
1343
    manual control of tray is unlocked.
1342
  * When the tray is being ejected, the code clears the cache for
1344
  * When the tray is being ejected, the code clears the cache for
1343
    corresponding device.
1345
    corresponding device.
1344
  * An example of usage of the function is the application CD_tray.
1346
  * An example of usage of the function is the application CD_tray.
1345
 
1347
 
1346
======================================================================
1348
======================================================================
1347
======== Function 24, subfunction 5 - load tray of disk drive. =======
1349
======== Function 24, subfunction 5 - load tray of disk drive. =======
1348
======================================================================
1350
======================================================================
1349
Parameters:
1351
Parameters:
1350
  * eax = 24 - function number
1352
  * eax = 24 - function number
1351
  * ebx = 5 - subfunction number
1353
  * ebx = 5 - subfunction number
1352
  * ecx = position of CD/DVD-drive
1354
  * ecx = position of CD/DVD-drive
1353
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1355
    from 0=Primary Master to 3=Secondary Slave for first IDE contr.
1354
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1356
    from 4=Primary Master to 7=Secondary Slave for second IDE contr.
1355
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1357
    from 8=Primary Master to 11=Secondary Slave for third IDE contr.
1356
Returned value:
1358
Returned value:
1357
  * function does not return value
1359
  * function does not return value
1358
Remarks:
1360
Remarks:
1359
  * The function is supported only for ATAPI devices (CD and DVD).
1361
  * The function is supported only for ATAPI devices (CD and DVD).
1360
  * An example of usage of the function is the application CD_tray.
1362
  * An example of usage of the function is the application CD_tray.
1361
 
1363
 
1362
======================================================================
1364
======================================================================
1363
======= Function 25 - put image area on the background layer. ========
1365
======= Function 25 - put image area on the background layer. ========
1364
======================================================================
1366
======================================================================
1365
Paramters:
1367
Paramters:
1366
  * eax = 25 - function number
1368
  * eax = 25 - function number
1367
  * ebx = pointer to the previously allocated memory area,
1369
  * ebx = pointer to the previously allocated memory area,
1368
        where placed the source images in a format BBGGRRTTBBGGRRTT...
1370
        where placed the source images in a format BBGGRRTTBBGGRRTT...
1369
  * ecx = [size on axis x]*65536 + [size on axis y]
1371
  * ecx = [size on axis x]*65536 + [size on axis y]
1370
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1372
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1371
Returned value:
1373
Returned value:
1372
  * function does not return value
1374
  * function does not return value
1373
Remarks:
1375
Remarks:
1374
  * Coordinates of the image are coordinates of the upper left corner
1376
  * Coordinates of the image are coordinates of the upper left corner
1375
    of the image relative to the screen.
1377
    of the image relative to the screen.
1376
  * Size of the image in bytes is 4*xsize*ysize
1378
  * Size of the image in bytes is 4*xsize*ysize
1377
  * TT - byte pointer of transparency, at current version:
1379
  * TT - byte pointer of transparency, at current version:
1378
         1 to FF - opaque, 0 - transparent.
1380
         1 to FF - opaque, 0 - transparent.
1379
  * The function places the image directly to LFB. It is not for
1381
  * The function places the image directly to LFB. It is not for
1380
    background image f.15. Options f.15 to f.25 does not make sense.
1382
    background image f.15. Options f.15 to f.25 does not make sense.
1381
 
1383
 
1382
======================================================================
1384
======================================================================
1383
======== Function 26, subfunction 1 - get MPU MIDI base port. ========
1385
======== Function 26, subfunction 1 - get MPU MIDI base port. ========
1384
======================================================================
1386
======================================================================
1385
Parameters:
1387
Parameters:
1386
  * eax = 26 - function number
1388
  * eax = 26 - function number
1387
  * ebx = 1 - subfunction number
1389
  * ebx = 1 - subfunction number
1388
Returned value:
1390
Returned value:
1389
  * eax = port number
1391
  * eax = port number
1390
Parameters:
1392
Parameters:
1391
  * To set base port use subfunction 1 of function 21.
1393
  * To set base port use subfunction 1 of function 21.
1392
 
1394
 
1393
======================================================================
1395
======================================================================
1394
========== Function 26, subfunction 2 - get keyboard layout. =========
1396
========== Function 26, subfunction 2 - get keyboard layout. =========
1395
======================================================================
1397
======================================================================
1396
The keyboard layout is used to convert keyboard scancodes to
1398
The keyboard layout is used to convert keyboard scancodes to
1397
ASCII-codes for function 2.
1399
ASCII-codes for function 2.
1398
Parameters:
1400
Parameters:
1399
  * eax = 26 - function number
1401
  * eax = 26 - function number
1400
  * ebx = 2 - subfunction number
1402
  * ebx = 2 - subfunction number
1401
  * ecx = what layout to get:
1403
  * ecx = what layout to get:
1402
    * 1 = normal layout
1404
    * 1 = normal layout
1403
    * 2 = layout with pressed Shift
1405
    * 2 = layout with pressed Shift
1404
    * 3 = layout with pressed Alt
1406
    * 3 = layout with pressed Alt
1405
  * edx = pointer to the 128-bytes buffer, where the layout will be
1407
  * edx = pointer to the 128-bytes buffer, where the layout will be
1406
    copied
1408
    copied
1407
Returned value:
1409
Returned value:
1408
  * function does not return value
1410
  * function does not return value
1409
Or:
1411
Or:
1410
  * eax = 26 - function number
1412
  * eax = 26 - function number
1411
  * ebx = 2 - subfunction number
1413
  * ebx = 2 - subfunction number
1412
  * ecx = 9
1414
  * ecx = 9
1413
Returned value:
1415
Returned value:
1414
  * eax = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1416
  * eax = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1415
Remarks:
1417
Remarks:
1416
  * If Alt is pressed, the layout with Alt is used;
1418
  * If Alt is pressed, the layout with Alt is used;
1417
    if Alt is not pressed, but Shift is pressed,
1419
    if Alt is not pressed, but Shift is pressed,
1418
    the layout with Shift is used;
1420
    the layout with Shift is used;
1419
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1421
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1420
    layout is used and then from the code is subtracted 0x60;
1422
    layout is used and then from the code is subtracted 0x60;
1421
    if no control key is pressed, the normal layout is used.
1423
    if no control key is pressed, the normal layout is used.
1422
  * To set layout and country identifier use
1424
  * To set layout and country identifier use
1423
    subfunction 2 of function 21.
1425
    subfunction 2 of function 21.
1424
  * Country identifier is global system variable, which is not used
1426
  * Country identifier is global system variable, which is not used
1425
    by the kernel itself; however the application '@taskbar' displays
1427
    by the kernel itself; however the application '@taskbar' displays
1426
    the corresponding icon (using this function).
1428
    the corresponding icon (using this function).
1427
  * The application @taskbar switches layouts on user request.
1429
  * The application @taskbar switches layouts on user request.
1428
 
1430
 
1429
======================================================================
1431
======================================================================
1430
========== Function 26, subfunction 5 - get system language. =========
1432
========== Function 26, subfunction 5 - get system language. =========
1431
======================================================================
1433
======================================================================
1432
Parameters:
1434
Parameters:
1433
  * eax = 26 - function number
1435
  * eax = 26 - function number
1434
  * ebx = 5 - subfunction number
1436
  * ebx = 5 - subfunction number
1435
Returned value:
1437
Returned value:
1436
  * eax = system language (1=eng, 2=fi, 3=ger, 4=rus)
1438
  * eax = system language (1=eng, 2=fi, 3=ger, 4=rus)
1437
Remarks:
1439
Remarks:
1438
  * System language is global system variable and is not used
1440
  * System language is global system variable and is not used
1439
    by the kernel itself, however application @taskbar draws the
1441
    by the kernel itself, however application @taskbar draws the
1440
    appropriate icon (using this function).
1442
    appropriate icon (using this function).
1441
  * To set system language use subfunction 5 of function 21.
1443
  * To set system language use subfunction 5 of function 21.
1442
 
1444
 
1443
======================================================================
1445
======================================================================
1444
=== Function 26, subfunction 9 - get the value of the time counter. ==
1446
=== Function 26, subfunction 9 - get the value of the time counter. ==
1445
======================================================================
1447
======================================================================
1446
Parameters:
1448
Parameters:
1447
  * eax = 26 - function number
1449
  * eax = 26 - function number
1448
  * ebx = 9 - subfunction number
1450
  * ebx = 9 - subfunction number
1449
Returned value:
1451
Returned value:
1450
  * eax = number of 1/100s of second, past from the system boot time
1452
  * eax = number of 1/100s of second, past from the system boot time
1451
Remarks:
1453
Remarks:
1452
  * Counter takes modulo 2^32, that correspond to a little more
1454
  * Counter takes modulo 2^32, that correspond to a little more
1453
    than 497 days.
1455
    than 497 days.
1454
  * To get system time use function 3.
1456
  * To get system time use function 3.  
1455
 
1457
  
1456
======================================================================
1458
======================================================================
-
 
1459
===================== Function 26, subfunction 10 ====================
-
 
1460
========== Get the value of the high precision time counter. =========
-
 
1461
======================================================================
-
 
1462
Parameters:
-
 
1463
  * eax = 26 - function number
-
 
1464
  * ebx = 10 - subfunction number
-
 
1465
Returned value:
-
 
1466
  * eax = number of nanoseconds since system boot time (lower DWORD)
-
 
1467
  * edx = number of nanoseconds since system boot time (high DWORD)  
-
 
1468
Remarks:
-
 
1469
  * The counter is based on HPET, if HPET is not available, resolution
-
 
1470
    will be reduced to 10 000 000 nanoseconds.
-
 
1471
 
-
 
1472
======================================================================
1457
===================== Function 26, subfunction 11 ====================
1473
===================== Function 26, subfunction 11 ====================
1458
========== Find out whether low-level HD access is enabled. ==========
1474
========== Find out whether low-level HD access is enabled. ==========
1459
======================================================================
1475
======================================================================
1460
Parameters:
1476
Parameters:
1461
  * eax = 26 - function number
1477
  * eax = 26 - function number
1462
  * ebx = 11 - subfunction number
1478
  * ebx = 11 - subfunction number
1463
Returned value:
1479
Returned value:
1464
  * eax = 0/1 - disabled/enabled
1480
  * eax = 0/1 - disabled/enabled
1465
Remarks:
1481
Remarks:
1466
  * Is used in LBA read (subfunction 8 of function 58).
1482
  * Is used in LBA read (subfunction 8 of function 58).
1467
  * To set current state use subfunction 11 of function 21.
1483
  * To set current state use subfunction 11 of function 21.
1468
 
1484
 
1469
======================================================================
1485
======================================================================
1470
===================== Function 26, subfunction 12 ====================
1486
===================== Function 26, subfunction 12 ====================
1471
========== Find out whether low-level PCI access is enabled. =========
1487
========== Find out whether low-level PCI access is enabled. =========
1472
======================================================================
1488
======================================================================
1473
Parameters:
1489
Parameters:
1474
  * eax = 26 - function number
1490
  * eax = 26 - function number
1475
  * ebx = 12 - subfunction number
1491
  * ebx = 12 - subfunction number
1476
Returned value:
1492
Returned value:
1477
  * eax = 0/1 - disabled/enabled
1493
  * eax = 0/1 - disabled/enabled
1478
Remarks:
1494
Remarks:
1479
  * Is used by operations with PCI bus (function 62).
1495
  * Is used by operations with PCI bus (function 62).
1480
  * The current implementation uses only low bit of ecx.
1496
  * The current implementation uses only low bit of ecx.
1481
  * To set the current state use subfunction 12 of function 21.
1497
  * To set the current state use subfunction 12 of function 21.
1482
 
1498
 
1483
======================================================================
1499
======================================================================
1484
=================== Function 29 - get system date. ===================
1500
=================== Function 29 - get system date. ===================
1485
======================================================================
1501
======================================================================
1486
Parameters:
1502
Parameters:
1487
  * eax = 29 - function number
1503
  * eax = 29 - function number
1488
Returned value:
1504
Returned value:
1489
  * eax = 0x00DDMMYY, where
1505
  * eax = 0x00DDMMYY, where
1490
    (binary-decimal coding, BCD, is used)
1506
    (binary-decimal coding, BCD, is used)
1491
  * YY = two low digits of year (00..99)
1507
  * YY = two low digits of year (00..99)
1492
  * MM = month (01..12)
1508
  * MM = month (01..12)
1493
  * DD = day (01..31)
1509
  * DD = day (01..31)
1494
Remarks:
1510
Remarks:
1495
  * To set system date use function 22.
1511
  * To set system date use function 22.
1496
 
1512
 
1497
======================================================================
1513
======================================================================
1498
============= Function 30 - work with the current folder. ============
1514
============= Function 30 - work with the current folder. ============
1499
======================================================================
1515
======================================================================
1500
 
1516
 
1501
--------- Subfunction 1 - set current folder for the thread. ---------
1517
--------- Subfunction 1 - set current folder for the thread. ---------
1502
Parameters:
1518
Parameters:
1503
  * eax = 30 - function number
1519
  * eax = 30 - function number
1504
  * ebx = 1 - subfunction number
1520
  * ebx = 1 - subfunction number
1505
  * ecx = pointer to ASCIIZ-string with the path to new current folder
1521
  * ecx = pointer to ASCIIZ-string with the path to new current folder
1506
Returned value:
1522
Returned value:
1507
  * function does not return value
1523
  * function does not return value
1508
 
1524
 
1509
--------- Subfunction 2 - get current folder for the thread. ---------
1525
--------- Subfunction 2 - get current folder for the thread. ---------
1510
Parameters:
1526
Parameters:
1511
  * eax = 30 - function number
1527
  * eax = 30 - function number
1512
  * ebx = 2 - subfunction number
1528
  * ebx = 2 - subfunction number
1513
  * ecx = pointer to buffer
1529
  * ecx = pointer to buffer
1514
  * edx = size of buffer
1530
  * edx = size of buffer
1515
Returned value:
1531
Returned value:
1516
  * eax = size of the current folder's name (including terminating 0)
1532
  * eax = size of the current folder's name (including terminating 0)
1517
Remarks:
1533
Remarks:
1518
  * If the buffer is too small to hold all data, only first (edx-1)
1534
  * If the buffer is too small to hold all data, only first (edx-1)
1519
    bytes are copied and than terminating 0 is inserted.
1535
    bytes are copied and than terminating 0 is inserted.
1520
  * By default, current folder for the thread is "/rd/1".
1536
  * By default, current folder for the thread is "/rd/1".
1521
  * At process/thread creation the current folder will be inherited
1537
  * At process/thread creation the current folder will be inherited
1522
    from the parent.
1538
    from the parent.
1523
 
1539
 
1524
--- Subfunction 3 - install the add.system directory for the kernel --
1540
--- Subfunction 3 - install the add.system directory for the kernel --
1525
Parameters:
1541
Parameters:
1526
  * eax = 30 - function number
1542
  * eax = 30 - function number
1527
  * ebx = 3 - subfunction number
1543
  * ebx = 3 - subfunction number
1528
  * ecx = pointer to a block of data:
1544
  * ecx = pointer to a block of data:
1529
          sysdir_name     rb 64
1545
          sysdir_name     rb 64
1530
          sysdir_path     rb 64
1546
          sysdir_path     rb 64
1531
For example:
1547
For example:
1532
dir_name1       db 'KolibriOS',0
1548
dir_name1       db 'KolibriOS',0
1533
                rb 64-10
1549
                rb 64-10
1534
dir_path1       db 'HD0/1',0
1550
dir_path1       db 'HD0/1',0
1535
                rb 64-6
1551
                rb 64-6
1536
Returned value:
1552
Returned value:
1537
  * function does not return value
1553
  * function does not return value
1538
Remarks:
1554
Remarks:
1539
  * The function can be called only 1 time for 1 session of the OS.
1555
  * The function can be called only 1 time for 1 session of the OS.
1540
 
1556
 
1541
======================================================================
1557
======================================================================
1542
========= Function 34 - who owner the pixel on the screen. ===========
1558
========= Function 34 - who owner the pixel on the screen. ===========
1543
======================================================================
1559
======================================================================
1544
Parameters:
1560
Parameters:
1545
  * eax = 34 - function number
1561
  * eax = 34 - function number
1546
  * ebx = x-coordinate (relative to the display)
1562
  * ebx = x-coordinate (relative to the display)
1547
  * ecx = y-coordinate (relative to the display)
1563
  * ecx = y-coordinate (relative to the display)
1548
 
1564
 
1549
Returned value:
1565
Returned value:
1550
  * eax = 0x000000XX - owner of pixel the slot window N
1566
  * eax = 0x000000XX - owner of pixel the slot window N
1551
    If incorrect values ebx and ecx then function returns 0
1567
    If incorrect values ebx and ecx then function returns 0
1552
  * The function takes the value from the area [_WinMapAddress]
1568
  * The function takes the value from the area [_WinMapAddress]
1553
 
1569
 
1554
======================================================================
1570
======================================================================
1555
======= Function 35 - read the color of a pixel on the screen. =======
1571
======= Function 35 - read the color of a pixel on the screen. =======
1556
======================================================================
1572
======================================================================
1557
Parameters:
1573
Parameters:
1558
  * eax = 35
1574
  * eax = 35
1559
  * ebx = y*xsize+x, where
1575
  * ebx = y*xsize+x, where
1560
  * (x,y) = coordinates of a pixel (beginning from 0)
1576
  * (x,y) = coordinates of a pixel (beginning from 0)
1561
  * xsize = horizontal screen size
1577
  * xsize = horizontal screen size
1562
Returned value:
1578
Returned value:
1563
  * eax = color 0x00RRGGBB
1579
  * eax = color 0x00RRGGBB
1564
Remarks:
1580
Remarks:
1565
  * To get screen sizes use function 14. Pay attention,
1581
  * To get screen sizes use function 14. Pay attention,
1566
    that it subtracts 1 from both sizes.
1582
    that it subtracts 1 from both sizes.
1567
  * There is also direct access (without any system calls)
1583
  * There is also direct access (without any system calls)
1568
    to videomemory through the selector gs. To get parameters of
1584
    to videomemory through the selector gs. To get parameters of
1569
    the current videomode, use function 61.
1585
    the current videomode, use function 61.
1570
 
1586
 
1571
======================================================================
1587
======================================================================
1572
=================== Function 36 - read screen area. ==================
1588
=================== Function 36 - read screen area. ==================
1573
======================================================================
1589
======================================================================
1574
Paramters:
1590
Paramters:
1575
  * eax = 36 - function number
1591
  * eax = 36 - function number
1576
  * ebx = pointer to the previously allocated memory area,
1592
  * ebx = pointer to the previously allocated memory area,
1577
        where will be placed the image in the format BBGGRRBBGGRR...
1593
        where will be placed the image in the format BBGGRRBBGGRR...
1578
  * ecx = [size on axis x]*65536 + [size on axis y]
1594
  * ecx = [size on axis x]*65536 + [size on axis y]
1579
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1595
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1580
Returned value:
1596
Returned value:
1581
  * function does not return value
1597
  * function does not return value
1582
Remarks:
1598
Remarks:
1583
  * Coordinates of the image are coordinates of the upper left corner
1599
  * Coordinates of the image are coordinates of the upper left corner
1584
    of the image relative to the screen.
1600
    of the image relative to the screen.
1585
  * Size of the image in bytes is 3*xsize*ysize.
1601
  * Size of the image in bytes is 3*xsize*ysize.
1586
 
1602
 
1587
======================================================================
1603
======================================================================
1588
=================== Function 37 - work with mouse. ===================
1604
=================== Function 37 - work with mouse. ===================
1589
======================================================================
1605
======================================================================
1590
 
1606
 
1591
---------- Subfunction 0 - screen coordinates of the mouse -----------
1607
---------- Subfunction 0 - screen coordinates of the mouse -----------
1592
Parameters:
1608
Parameters:
1593
  * eax = 37 - function number
1609
  * eax = 37 - function number
1594
  * ebx = 0 - subfunction number
1610
  * ebx = 0 - subfunction number
1595
Returned value:
1611
Returned value:
1596
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1612
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1597
    (beginning from 0)
1613
    (beginning from 0)
1598
 
1614
 
1599
-- Subfunction 1 - coordinates of the mouse relative to the window ---
1615
-- Subfunction 1 - coordinates of the mouse relative to the window ---
1600
Parameters:
1616
Parameters:
1601
  * eax = 37 - function number
1617
  * eax = 37 - function number
1602
  * ebx = 1 - subfunction number
1618
  * ebx = 1 - subfunction number
1603
Returned value:
1619
Returned value:
1604
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1620
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1605
    relative to the application window (beginning from 0)
1621
    relative to the application window (beginning from 0)
1606
Remarks:
1622
Remarks:
1607
  * The value is calculated by formula (x-xwnd)*65536 + (y-ywnd).
1623
  * The value is calculated by formula (x-xwnd)*65536 + (y-ywnd).
1608
    If y>=ywnd, the low word is non-negative and contains
1624
    If y>=ywnd, the low word is non-negative and contains
1609
    relative y-coordinate, and the high word - relative x-coordinate
1625
    relative y-coordinate, and the high word - relative x-coordinate
1610
    (with correct sign). Otherwise the low word is negative and still
1626
    (with correct sign). Otherwise the low word is negative and still
1611
    contains relative y-coordinate, and to the high word
1627
    contains relative y-coordinate, and to the high word
1612
    1 should be added.
1628
    1 should be added.
1613
 
1629
 
1614
------------ Subfunction 2 - pressed buttons of the mouse ------------
1630
------------- Subfunction 2 - states of the mouse buttons ------------
1615
Parameters:
1631
Parameters:
1616
  * eax = 37 - function number
1632
  * eax = 37 - function number
1617
  * ebx = 2 - subfunction number
1633
  * ebx = 2 - subfunction number
1618
Returned value:
1634
Returned value:
-
 
1635
  * eax = bits 0-4 equal to subfunction 3
-
 
1636
 
-
 
1637
------- Subfunction 3 - states and events of the mouse buttons -------
-
 
1638
Parameters:
-
 
1639
  * eax = 37 - function number
-
 
1640
  * ebx = 3 - subfunction number
-
 
1641
Returned value:
1619
  * eax contains information on the pressed mouse buttons:
1642
  * eax contains next information:
-
 
1643
 
-
 
1644
states:
1620
  * bit 0 is set = left button is pressed
1645
  * bit 0 is set = left button is held
1621
  * bit 1 is set = right button is pressed
1646
  * bit 1 is set = right button is held
1622
  * bit 2 is set = middle button is pressed
1647
  * bit 2 is set = middle button is held
-
 
1648
  * bit 3 is set = 4th button is held
-
 
1649
  * bit 4 is set = 5th button is held
-
 
1650
 
-
 
1651
events:
1623
  * bit 3 is set = 4th button is pressed
1652
  * bit 8 is set = left button is pressed
1624
  * bit 4 is set = 5th button is pressed
1653
  * bit 9 is set = right button is pressed
-
 
1654
  * bit 10 is set = middle button is pressed
-
 
1655
 
-
 
1656
  * bit 15 is set = vertical scroll is used
-
 
1657
 
-
 
1658
  * bit 16 is set = left button is released
1625
  * other bits are cleared
1659
  * bit 17 is set = right button is released
-
 
1660
  * bit 18 is set = middle button is released
-
 
1661
 
-
 
1662
  * bit 23 is set = horisontal scroll is used
-
 
1663
 
-
 
1664
  * bit 24 is set = doubleclick by left button
1626
 
1665
 
1627
-------------------- Subfunction 4 - load cursor ---------------------
1666
-------------------- Subfunction 4 - load cursor ---------------------
1628
Parameters:
1667
Parameters:
1629
  * eax = 37 - function number
1668
  * eax = 37 - function number
1630
  * ebx = 4 - subfunction number
1669
  * ebx = 4 - subfunction number
1631
  * dx = data source:
1670
  * dx = data source:
1632
  * dx = LOAD_FROM_FILE = 0 - data in a file
1671
  * dx = LOAD_FROM_FILE = 0 - data in a file
1633
    * ecx = pointer to full path to the cursor file
1672
    * ecx = pointer to full path to the cursor file
1634
    * the file must be in the format .cur, which is standard for
1673
    * the file must be in the format .cur, which is standard for
1635
      MS Windows, at that of the size 32*32 pixels
1674
      MS Windows, at that of the size 32*32 pixels
1636
  * dx = LOAD_FROM_MEM = 1 - data of file are already loaded in memory
1675
  * dx = LOAD_FROM_MEM = 1 - data of file are already loaded in memory
1637
    * ecx = pointer to data of the cursor file
1676
    * ecx = pointer to data of the cursor file
1638
    * the data format is the same as in the previous case
1677
    * the data format is the same as in the previous case
1639
  * dx = LOAD_INDIRECT = 2 - data in memory
1678
  * dx = LOAD_INDIRECT = 2 - data in memory
1640
    * ecx = pointer to cursor image in the format ARGB 32*32 pixels
1679
    * ecx = pointer to cursor image in the format ARGB 32*32 pixels
1641
    * edx = 0xXXYY0002, where
1680
    * edx = 0xXXYY0002, where
1642
      * XX = x-coordinate of cursor hotspot
1681
      * XX = x-coordinate of cursor hotspot
1643
      * YY = y-coordinate
1682
      * YY = y-coordinate
1644
      * 0 <= XX, YY <= 31
1683
      * 0 <= XX, YY <= 31
1645
Returned value:
1684
Returned value:
1646
  * eax = 0 - failed
1685
  * eax = 0 - failed
1647
  * otherwise eax = cursor handle
1686
  * otherwise eax = cursor handle
1648
 
1687
 
1649
--------------------- Subfunction 5 - set cursor ---------------------
1688
--------------------- Subfunction 5 - set cursor ---------------------
1650
Sets new cursor for the window of the current thread.
1689
Sets new cursor for the window of the current thread.
1651
Parameters:
1690
Parameters:
1652
  * eax = 37 - function number
1691
  * eax = 37 - function number
1653
  * ebx = 5 - subfunction number
1692
  * ebx = 5 - subfunction number
1654
  * ecx = cursor handle
1693
  * ecx = cursor handle
1655
Returned value:
1694
Returned value:
1656
  * eax = handle of previous cursor
1695
  * eax = handle of previous cursor
1657
Remarks:
1696
Remarks:
1658
  * If the handle is incorrect, the function restores the default
1697
  * If the handle is incorrect, the function restores the default
1659
    cursor (standard arrow). In particular, ecx=0 restores it.
1698
    cursor (standard arrow). In particular, ecx=0 restores it.
1660
 
1699
 
1661
------------------- Subfunction 6 - delete cursor --------------------
1700
------------------- Subfunction 6 - delete cursor --------------------
1662
Parameters:
1701
Parameters:
1663
  * eax = 37 - function number
1702
  * eax = 37 - function number
1664
  * ebx = 6 - subfunction number
1703
  * ebx = 6 - subfunction number
1665
  * ecx = cursor handle
1704
  * ecx = cursor handle
1666
Returned value:
1705
Returned value:
1667
  * eax destroyed
1706
  * eax destroyed
1668
Remarks:
1707
Remarks:
1669
  * The cursor must be loaded previously by the current thread
1708
  * The cursor must be loaded previously by the current thread
1670
    (with the call to subfunction 4). The function does not delete
1709
    (with the call to subfunction 4). The function does not delete
1671
    system cursors and cursors, loaded by another applications.
1710
    system cursors and cursors, loaded by another applications.
1672
  * If the active cursor (set by subfunction 5) is deleted,
1711
  * If the active cursor (set by subfunction 5) is deleted,
1673
    the system restores the default cursor (standard arrow).
1712
    the system restores the default cursor (standard arrow).
1674
 
1713
 
1675
------------------ Subfunction 7 - get scroll data -------------------
1714
------------------ Subfunction 7 - get scroll data -------------------
1676
Parameters:
1715
Parameters:
1677
  * eax = 37 - function number
1716
  * eax = 37 - function number
1678
  * ebx = 7 - subfunction number
1717
  * ebx = 7 - subfunction number
1679
Returned value:
1718
Returned value:
1680
  * eax = [horizontal offset]*65536 + [vertical offset]
1719
  * eax = [horizontal offset]*65536 + [vertical offset]
1681
Remarks:
1720
Remarks:
1682
  * Scroll data is available for active window only.
1721
  * Scroll data is available for active window only.
1683
  * Values are zeroed after reading.
1722
  * Values are zeroed after reading.
1684
  * Values are signed.
1723
  * Values are signed.
1685
 
1724
 
1686
======================================================================
1725
======================================================================
1687
====================== Function 38 - draw line. ======================
1726
====================== Function 38 - draw line. ======================
1688
======================================================================
1727
======================================================================
1689
Parameters:
1728
Parameters:
1690
  * eax = 38 - function number
1729
  * eax = 38 - function number
1691
  * ebx = [start coordinate on axis x]*65536 +
1730
  * ebx = [start coordinate on axis x]*65536 +
1692
              [end coordinate on axis x]
1731
              [end coordinate on axis x]
1693
  * ecx = [start coordinate on axis y]*65536 +
1732
  * ecx = [start coordinate on axis y]*65536 +
1694
              [end coordinate on axis y]
1733
              [end coordinate on axis y]
1695
  * edx = 0x00RRGGBB - color
1734
  * edx = 0x00RRGGBB - color
1696
    edx = 0x01xxxxxx - draw inversed line
1735
    edx = 0x01xxxxxx - draw inversed line
1697
          (low 24 bits are ignored)
1736
          (low 24 bits are ignored)
1698
Returned value:
1737
Returned value:
1699
  * function does not return value
1738
  * function does not return value
1700
Remarks:
1739
Remarks:
1701
  * Coordinates are relative to the window.
1740
  * Coordinates are relative to the window.
1702
  * End point is also drawn.
1741
  * End point is also drawn.
1703
 
1742
 
1704
======================================================================
1743
======================================================================
1705
== Function 39, subfunction 1 - get a size of the background image. ==
1744
== Function 39, subfunction 1 - get a size of the background image. ==
1706
======================================================================
1745
======================================================================
1707
Parameters:
1746
Parameters:
1708
  * eax = 39 - function number
1747
  * eax = 39 - function number
1709
  * ebx = 1 - subfunction number
1748
  * ebx = 1 - subfunction number
1710
Returned value:
1749
Returned value:
1711
  * eax = [width]*65536 + [height]
1750
  * eax = [width]*65536 + [height]
1712
Remarks:
1751
Remarks:
1713
  * There is a pair function to set sizes of background image -
1752
  * There is a pair function to set sizes of background image -
1714
    subfunction 1 of function 15. After which it is necessary,
1753
    subfunction 1 of function 15. After which it is necessary,
1715
    of course, anew to define image.
1754
    of course, anew to define image.
1716
 
1755
 
1717
======================================================================
1756
======================================================================
1718
== Function 39, subfunction 2 - get pixel from the background image. =
1757
== Function 39, subfunction 2 - get pixel from the background image. =
1719
======================================================================
1758
======================================================================
1720
Parameters:
1759
Parameters:
1721
  * eax = 39 - function number
1760
  * eax = 39 - function number
1722
  * ebx = 2 - subfunction number
1761
  * ebx = 2 - subfunction number
1723
  * ecx = offset
1762
  * ecx = offset
1724
Returned value:
1763
Returned value:
1725
  * eax = 0x00RRGGBB - pixel color, if offset is valid
1764
  * eax = 0x00RRGGBB - pixel color, if offset is valid
1726
    (less than 0x160000-16)
1765
    (less than 0x160000-16)
1727
  * eax = 2 otherwise
1766
  * eax = 2 otherwise
1728
Remarks:
1767
Remarks:
1729
  * Do not rely on returned value for invalid offsets, it may be
1768
  * Do not rely on returned value for invalid offsets, it may be
1730
    changed in future kernel versions.
1769
    changed in future kernel versions.
1731
  * Offset for pixel with coordinates (x,y)
1770
  * Offset for pixel with coordinates (x,y)
1732
    is calculated as (x+y*xsize)*3.
1771
    is calculated as (x+y*xsize)*3.
1733
  * There is a pair function to set pixel on the background image -
1772
  * There is a pair function to set pixel on the background image -
1734
    subfunction 2 of function 15.
1773
    subfunction 2 of function 15.
1735
 
1774
 
1736
======================================================================
1775
======================================================================
1737
== Function 39, subfunction 4 - get drawing mode for the background. =
1776
== Function 39, subfunction 4 - get drawing mode for the background. =
1738
======================================================================
1777
======================================================================
1739
Parameters:
1778
Parameters:
1740
  * eax = 39 - function number
1779
  * eax = 39 - function number
1741
  * ebx = 4 - subfunction number
1780
  * ebx = 4 - subfunction number
1742
Returned value:
1781
Returned value:
1743
  * eax = 1 - tile
1782
  * eax = 1 - tile
1744
  * eax = 2 - stretch
1783
  * eax = 2 - stretch
1745
Remarks:
1784
Remarks:
1746
  * There is a pair function to set drawing mode -
1785
  * There is a pair function to set drawing mode -
1747
    subfunction 4 of function 15.
1786
    subfunction 4 of function 15.
1748
 
1787
 
1749
======================================================================
1788
======================================================================
1750
=========== Function 40 - set the mask for expected events. ==========
1789
=========== Function 40 - set the mask for expected events. ==========
1751
======================================================================
1790
======================================================================
1752
The mask for expected events affects function working with events
1791
The mask for expected events affects function working with events
1753
10, 11, 23 - they notify only about events allowed by this mask.
1792
10, 11, 23 - they notify only about events allowed by this mask.
1754
Parameters:
1793
Parameters:
1755
  * eax = 40 - function number
1794
  * eax = 40 - function number
1756
  * ebx = mask: bit i corresponds to event i+1 (see list of events)
1795
  * ebx = mask: bit i corresponds to event i+1 (see list of events)
1757
    (set bit permits notice on event)
1796
    (set bit permits notice on event)
1758
    bit 31: mouse active/inactive filter
1797
    bit 31: mouse active/inactive filter
1759
    bit 31 = 0 - inactive window receive mouse events
1798
    bit 31 = 0 - inactive window receive mouse events
1760
    bit 31 = 1 - inactive window does not receive mouse events
1799
    bit 31 = 1 - inactive window does not receive mouse events
1761
    bit 30: cursor position filter
1800
    bit 30: cursor position filter
1762
    bit 30 = 0 = the window receive mouse events if cursor
1801
    bit 30 = 0 = the window receive mouse events if cursor
1763
                 outside window
1802
                 outside window
1764
    bit 30 = 1 - the window does not receive mouse events if cursor
1803
    bit 30 = 1 - the window does not receive mouse events if cursor
1765
                 outside window
1804
                 outside window
1766
Returned value:
1805
Returned value:
1767
  * eax = previous value of mask
1806
  * eax = previous value of mask
1768
Remarks:
1807
Remarks:
1769
  * Default mask (7=111b) enables nofices about redraw,
1808
  * Default mask (7=111b) enables nofices about redraw,
1770
    keys and buttons. This is enough for many applications.
1809
    keys and buttons. This is enough for many applications.
1771
  * Events prohibited in the mask are saved anyway, when come;
1810
  * Events prohibited in the mask are saved anyway, when come;
1772
    they are simply not informed with event functions.
1811
    they are simply not informed with event functions.
1773
  * Event functions take into account the mask on moment of
1812
  * Event functions take into account the mask on moment of
1774
    function call, not on moment of event arrival.
1813
    function call, not on moment of event arrival.
1775
 
1814
 
1776
 
1815
 
1777
======================================================================
1816
======================================================================
1778
================ Function 43 - input/output to a port. ===============
1817
================ Function 43 - input/output to a port. ===============
1779
======================================================================
1818
======================================================================
1780
 
1819
 
1781
------------------------ Output data to port -------------------------
1820
------------------------ Output data to port -------------------------
1782
Parameters:
1821
Parameters:
1783
  * eax = 43 - function number
1822
  * eax = 43 - function number
1784
  * bl = byte for output
1823
  * bl = byte for output
1785
  * ecx = port number 0xnnnn (from 0 to 0xFFFF)
1824
  * ecx = port number 0xnnnn (from 0 to 0xFFFF)
1786
Returned value:
1825
Returned value:
1787
  * eax = 0 - success
1826
  * eax = 0 - success
1788
  * eax = 1 - the thread has not reserved the selected port
1827
  * eax = 1 - the thread has not reserved the selected port
1789
 
1828
 
1790
------------------------ Input data from port ------------------------
1829
------------------------ Input data from port ------------------------
1791
Parameters:
1830
Parameters:
1792
  * eax = 43 - function number
1831
  * eax = 43 - function number
1793
  * ebx is ignored
1832
  * ebx is ignored
1794
  * ecx = 0x8000nnnn, where nnnn = port number (from 0 to 0xFFFF)
1833
  * ecx = 0x8000nnnn, where nnnn = port number (from 0 to 0xFFFF)
1795
Returned value:
1834
Returned value:
1796
  * eax = 0 - success, thus ebx = entered byte
1835
  * eax = 0 - success, thus ebx = entered byte
1797
  * eax = 1 - the thread has not reserved the selected port
1836
  * eax = 1 - the thread has not reserved the selected port
1798
Remarks:
1837
Remarks:
1799
  * Previously the thread must reserve the selected port
1838
  * Previously the thread must reserve the selected port
1800
    for itself by function 46.
1839
    for itself by function 46.
1801
  * Instead of call to this function it is better to use
1840
  * Instead of call to this function it is better to use
1802
    processor instructions in/out - this is much
1841
    processor instructions in/out - this is much
1803
    faster and a bit shorter and easier.
1842
    faster and a bit shorter and easier.
1804
 
1843
 
1805
 
1844
 
1806
======================================================================
1845
======================================================================
1807
====== Function 46 - reserve/free a group of input/output ports. =====
1846
====== Function 46 - reserve/free a group of input/output ports. =====
1808
======================================================================
1847
======================================================================
1809
To work with reserved ports an application can access directly by
1848
To work with reserved ports an application can access directly by
1810
commands in/out (recommended way) and can use function 43
1849
commands in/out (recommended way) and can use function 43
1811
(not recommended way).
1850
(not recommended way).
1812
Parameters:
1851
Parameters:
1813
  * eax = 46 - function number
1852
  * eax = 46 - function number
1814
  * ebx = 0 - reserve, 1 - free
1853
  * ebx = 0 - reserve, 1 - free
1815
  * ecx = start port number
1854
  * ecx = start port number
1816
  * edx = end port number (inclusive)
1855
  * edx = end port number (inclusive)
1817
Returned value:
1856
Returned value:
1818
  * eax = 0 - success
1857
  * eax = 0 - success
1819
  * eax = 1 - error
1858
  * eax = 1 - error
1820
Remarks:
1859
Remarks:
1821
  * For ports reservation: an error occurs if and only if
1860
  * For ports reservation: an error occurs if and only if
1822
    one from the following condition satisfies:
1861
    one from the following condition satisfies:
1823
    * start port is more than end port;
1862
    * start port is more than end port;
1824
    * the selected range contains incorrect port number
1863
    * the selected range contains incorrect port number
1825
      (correct are from 0 to 0xFFFF);
1864
      (correct are from 0 to 0xFFFF);
1826
    * limit for the total number of reserved areas is exceeded
1865
    * limit for the total number of reserved areas is exceeded
1827
      (maximum 255 are allowed);
1866
      (maximum 255 are allowed);
1828
    * the selected range intersects with any of earlier reserved
1867
    * the selected range intersects with any of earlier reserved
1829
  * For ports free: an error is an attempt to free range,
1868
  * For ports free: an error is an attempt to free range,
1830
    that was not earlier reserved by this function
1869
    that was not earlier reserved by this function
1831
    (with same ecx,edx).
1870
    (with same ecx,edx).
1832
  * If an error occurs (for both cases) function performs no action.
1871
  * If an error occurs (for both cases) function performs no action.
1833
  * At booting the system reserves for itself ports
1872
  * At booting the system reserves for itself ports
1834
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (inclusively).
1873
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (inclusively).
1835
  * When a thread terminates, all reserved by it ports
1874
  * When a thread terminates, all reserved by it ports
1836
    are freed automatically.
1875
    are freed automatically.
1837
 
1876
 
1838
======================================================================
1877
======================================================================
1839
============= Function 47 - draw a number in the window. =============
1878
============= Function 47 - draw a number in the window. =============
1840
======================================================================
1879
======================================================================
1841
Parameters:
1880
Parameters:
1842
  * eax = 47 - function number
1881
  * eax = 47 - function number
1843
  * ebx = parameters of conversion number to text:
1882
  * ebx = parameters of conversion number to text:
1844
    * bl = 0 - ecx contains number
1883
    * bl = 0 - ecx contains number
1845
    * bl = 1 - ecx contains pointer to dword/qword-number
1884
    * bl = 1 - ecx contains pointer to dword/qword-number
1846
    * bh = 0 - display in decimal number system
1885
    * bh = 0 - display in decimal number system
1847
    * bh = 1 - display in hexadecimal system
1886
    * bh = 1 - display in hexadecimal system
1848
    * bh = 2 - display in binary system
1887
    * bh = 2 - display in binary system
1849
    * bits 16-21 = how many digits to display
1888
    * bits 16-21 = how many digits to display
1850
    * bits 22-29 reserved and must be set to 0
1889
    * bits 22-29 reserved and must be set to 0
1851
    * bit 30 set = display qword (64-bit) number (must be bl=1)
1890
    * bit 30 set = display qword (64-bit) number (must be bl=1)
1852
    * bit 31 set = do not display leading zeroes of the number
1891
    * bit 31 set = do not display leading zeroes of the number
1853
  * ecx = number (if bl=0) or pointer (if bl=1)
1892
  * ecx = number (if bl=0) or pointer (if bl=1)
1854
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1893
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1855
  * esi = 0xX0RRGGBB:
1894
  * esi = 0xX0RRGGBB:
1856
    * RR, GG, BB specify the color
1895
    * RR, GG, BB specify the color
1857
    * X = ABnn (bits)
1896
    * X = ABnn (bits)
1858
    * nn = font (0/1)
1897
    * nn = font (0/1)
1859
    * A is ignored
1898
    * A is ignored
1860
    * B=1 - fill background with the color edi
1899
    * B=1 - fill background with the color edi
1861
Returned value:
1900
Returned value:
1862
  * function does not return value
1901
  * function does not return value
1863
Remarks:
1902
Remarks:
1864
  * The given length must not exceed 60.
1903
  * The given length must not exceed 60.
1865
  * The exactly given amount of digits is output. If number is small
1904
  * The exactly given amount of digits is output. If number is small
1866
    and can be written by smaller amount of digits, it is supplemented
1905
    and can be written by smaller amount of digits, it is supplemented
1867
    by leading zeroes; if the number is big and can not be written by
1906
    by leading zeroes; if the number is big and can not be written by
1868
    given amount of digits, extra digits are not drawn.
1907
    given amount of digits, extra digits are not drawn.
1869
  * Parameters of fonts are shown in the description of function 4
1908
  * Parameters of fonts are shown in the description of function 4
1870
    (text output).
1909
    (text output).
1871
 
1910
 
1872
======================================================================
1911
======================================================================
1873
========= Function 48, subfunction 0 - apply screen settings. ========
1912
========= Function 48, subfunction 0 - apply screen settings. ========
1874
======================================================================
1913
======================================================================
1875
Parameters:
1914
Parameters:
1876
  * eax = 48 - function number
1915
  * eax = 48 - function number
1877
  * ebx = 0 - subfunction number
1916
  * ebx = 0 - subfunction number
1878
  * ecx = 0 - reserved
1917
  * ecx = 0 - reserved
1879
Returned value:
1918
Returned value:
1880
  * function does not return value
1919
  * function does not return value
1881
Remarks:
1920
Remarks:
1882
  * Function redraws the screen after parameters change by
1921
  * Function redraws the screen after parameters change by
1883
    subfunctions 1 and 2.
1922
    subfunctions 1 and 2.
1884
  * Function call without prior call to one of indicated subfunctions
1923
  * Function call without prior call to one of indicated subfunctions
1885
    is ignored.
1924
    is ignored.
1886
  * Function call with nonzero ecx is ignored.
1925
  * Function call with nonzero ecx is ignored.
1887
 
1926
 
1888
======================================================================
1927
======================================================================
1889
=========== Function 48, subfunction 1 - set button style. ===========
1928
=========== Function 48, subfunction 1 - set button style. ===========
1890
======================================================================
1929
======================================================================
1891
Parameters:
1930
Parameters:
1892
  * eax = 48 - function number
1931
  * eax = 48 - function number
1893
  * ebx = 1 - subfunction number
1932
  * ebx = 1 - subfunction number
1894
  * ecx = button style:
1933
  * ecx = button style:
1895
    * 0 = flat
1934
    * 0 = flat
1896
    * 1 = 3d
1935
    * 1 = 3d
1897
Returned value:
1936
Returned value:
1898
  * function does not return value
1937
  * function does not return value
1899
Remarks:
1938
Remarks:
1900
  * After call to this function one should redraw the screen by
1939
  * After call to this function one should redraw the screen by
1901
    subfunction 0.
1940
    subfunction 0.
1902
  * Button style influences only to their draw of function 8.
1941
  * Button style influences only to their draw of function 8.
1903
 
1942
 
1904
======================================================================
1943
======================================================================
1905
====== Function 48, subfunction 2 - set standard window colors. ======
1944
====== Function 48, subfunction 2 - set standard window colors. ======
1906
======================================================================
1945
======================================================================
1907
Parameters:
1946
Parameters:
1908
  * eax = 48 - function number
1947
  * eax = 48 - function number
1909
  * ebx = 2 - subfunction number
1948
  * ebx = 2 - subfunction number
1910
  * ecx = pointer to the color table
1949
  * ecx = pointer to the color table
1911
  * edx = size of the color table
1950
  * edx = size of the color table
1912
    (must be 40 bytes for future compatibility)
1951
    (must be 40 bytes for future compatibility)
1913
Format of the color table is shown in description of subfunction 3.
1952
Format of the color table is shown in description of subfunction 3.
1914
Returned value:
1953
Returned value:
1915
  * function does not return value
1954
  * function does not return value
1916
Remarks:
1955
Remarks:
1917
  * After call to this function one should redraw the screen by
1956
  * After call to this function one should redraw the screen by
1918
    subfunction 0.
1957
    subfunction 0.
1919
  * Table of standard colors influences only to applications,
1958
  * Table of standard colors influences only to applications,
1920
    which receive this table obviously (by subfunction 3)
1959
    which receive this table obviously (by subfunction 3)
1921
    and use it (specifying colors from it to drawing functions).
1960
    and use it (specifying colors from it to drawing functions).
1922
  * Table of standard colors is included in skin and is installed
1961
  * Table of standard colors is included in skin and is installed
1923
    anew with skin installation (by subfunction 8).
1962
    anew with skin installation (by subfunction 8).
1924
  * Color table can be viewed/changed interactively with
1963
  * Color table can be viewed/changed interactively with
1925
    the application 'desktop'.
1964
    the application 'desktop'.
1926
 
1965
 
1927
======================================================================
1966
======================================================================
1928
====== Function 48, subfunction 3 - get standard window colors. ======
1967
====== Function 48, subfunction 3 - get standard window colors. ======
1929
======================================================================
1968
======================================================================
1930
Parameters:
1969
Parameters:
1931
  * eax = 48 - function number
1970
  * eax = 48 - function number
1932
  * ebx = 3 - subfunction number
1971
  * ebx = 3 - subfunction number
1933
  * ecx = pointer to the buffer with size edx bytes,
1972
  * ecx = pointer to the buffer with size edx bytes,
1934
    where table will be written
1973
    where table will be written
1935
  * edx = size of color table
1974
  * edx = size of color table
1936
    (must be 40 bytes for future compatibility)
1975
    (must be 40 bytes for future compatibility)
1937
Returned value:
1976
Returned value:
1938
  * function does not return value
1977
  * function does not return value
1939
Format of the color table:
1978
Format of the color table:
1940
each item is dword-value for color 0x00RRGGBB
1979
each item is dword-value for color 0x00RRGGBB
1941
  * +0: dword: frames - color of frame
1980
  * +0: dword: frames - color of frame
1942
  * +4: dword: grab - color of header
1981
  * +4: dword: grab - color of header
1943
  * +8: dword: grab_button - color of button on header bar
1982
  * +8: dword: grab_button - color of button on header bar
1944
  * +12 = +0xC: dword: grab_button_text - color of text on button
1983
  * +12 = +0xC: dword: grab_button_text - color of text on button
1945
    on header bar
1984
    on header bar
1946
  * +16 = +0x10: dword: grab_text - color of text on header
1985
  * +16 = +0x10: dword: grab_text - color of text on header
1947
  * +20 = +0x14: dword: work - color of working area
1986
  * +20 = +0x14: dword: work - color of working area
1948
  * +24 = +0x18: dword: work_button - color of button in working area
1987
  * +24 = +0x18: dword: work_button - color of button in working area
1949
  * +28 = +0x1C: dword: work_button_text - color of text on button
1988
  * +28 = +0x1C: dword: work_button_text - color of text on button
1950
    in working area
1989
    in working area
1951
  * +32 = +0x20: dword: work_text - color of text in working area
1990
  * +32 = +0x20: dword: work_text - color of text in working area
1952
  * +36 = +0x24: dword: work_graph - color of graphics in working area
1991
  * +36 = +0x24: dword: work_graph - color of graphics in working area
1953
Remarks:
1992
Remarks:
1954
  * Structure of the color table is described in the standard
1993
  * Structure of the color table is described in the standard
1955
    include file 'macros.inc' as 'system_colors'; for example,
1994
    include file 'macros.inc' as 'system_colors'; for example,
1956
    it is possible to write:
1995
    it is possible to write:
1957
    	sc	system_colors		; variable declaration
1996
        sc      system_colors           ; variable declaration
1958
    	...				; somewhere one must call
1997
        ...                             ; somewhere one must call
1959
    					; this function with ecx=sc
1998
                                        ; this function with ecx=sc
1960
    	mov	ecx, [sc.work_button_text]	; read text color on
1999
        mov     ecx, [sc.work_button_text]      ; read text color on
1961
    					; buttin in working area
2000
                                        ; buttin in working area
1962
  * A program itself desides to use or not to use color table.
2001
  * A program itself desides to use or not to use color table.
1963
    For usage program must simply at calls to drawing functions select
2002
    For usage program must simply at calls to drawing functions select
1964
    color taken from the table.
2003
    color taken from the table.
1965
  * At change of the table of standard colors (by subfunction 2 with
2004
  * At change of the table of standard colors (by subfunction 2 with
1966
    the subsequent application of changes by subfunction 0 or
2005
    the subsequent application of changes by subfunction 0 or
1967
    at skin set by subfunction 8) the system sends to all windows
2006
    at skin set by subfunction 8) the system sends to all windows
1968
    redraw message (the event with code 1).
2007
    redraw message (the event with code 1).
1969
  * Color table can be viewed/changed interactively with
2008
  * Color table can be viewed/changed interactively with
1970
    the application 'desktop'.
2009
    the application 'desktop'.
1971
 
2010
 
1972
======================================================================
2011
======================================================================
1973
============ Function 48, subfunction 4 - get skin height. ===========
2012
============ Function 48, subfunction 4 - get skin height. ===========
1974
======================================================================
2013
======================================================================
1975
Parameters:
2014
Parameters:
1976
  * eax = 48 - function number
2015
  * eax = 48 - function number
1977
  * ebx = 4 - subfunction number
2016
  * ebx = 4 - subfunction number
1978
Returned value:
2017
Returned value:
1979
  * eax = skin height
2018
  * eax = skin height
1980
Remarks:
2019
Remarks:
1981
  * Skin height is defined as the height of a header
2020
  * Skin height is defined as the height of a header
1982
    of skinned windows.
2021
    of skinned windows.
1983
  * See also general structure of window in the description
2022
  * See also general structure of window in the description
1984
    of function 0.
2023
    of function 0.
1985
 
2024
 
1986
======================================================================
2025
======================================================================
1987
======== Function 48, subfunction 5 - get screen working area. =======
2026
======== Function 48, subfunction 5 - get screen working area. =======
1988
======================================================================
2027
======================================================================
1989
Parameters:
2028
Parameters:
1990
  * eax = 48 - function number
2029
  * eax = 48 - function number
1991
  * ebx = 5 - subfunction number
2030
  * ebx = 5 - subfunction number
1992
Returned value:
2031
Returned value:
1993
  * eax = [left]*65536 + [right]
2032
  * eax = [left]*65536 + [right]
1994
  * ebx = [top]*65536 + [bottom]
2033
  * ebx = [top]*65536 + [bottom]
1995
Remarks:
2034
Remarks:
1996
  * The screen working area defines position and coordinates of
2035
  * The screen working area defines position and coordinates of
1997
    a maximized window.
2036
    a maximized window.
1998
  * The screen working area in view of normal work is all screen
2037
  * The screen working area in view of normal work is all screen
1999
    without taskbar ('@taskbar' application).
2038
    without taskbar ('@taskbar' application).
2000
  * (left,top) are coordinates of the left upper corner,
2039
  * (left,top) are coordinates of the left upper corner,
2001
    (right,bottom) are coordinates of the right lower one.
2040
    (right,bottom) are coordinates of the right lower one.
2002
    Thus the size of working area on x axis can be calculated by
2041
    Thus the size of working area on x axis can be calculated by
2003
    formula right-left+1, on y axis - by formula bottom-right+1.
2042
    formula right-left+1, on y axis - by formula bottom-right+1.
2004
  * See also function 14,
2043
  * See also function 14,
2005
    to get sizes of all screen.
2044
    to get sizes of all screen.
2006
  * There is a pair function to set working area - subfunction 6.
2045
  * There is a pair function to set working area - subfunction 6.
2007
 
2046
 
2008
======================================================================
2047
======================================================================
2009
======== Function 48, subfunction 6 - set screen working area. =======
2048
======== Function 48, subfunction 6 - set screen working area. =======
2010
======================================================================
2049
======================================================================
2011
Parameters:
2050
Parameters:
2012
  * eax = 48 - function number
2051
  * eax = 48 - function number
2013
  * ebx = 6 - subfunction number
2052
  * ebx = 6 - subfunction number
2014
  * ecx = [left]*65536 + [right]
2053
  * ecx = [left]*65536 + [right]
2015
  * edx = [top]*65536 + [bottom]
2054
  * edx = [top]*65536 + [bottom]
2016
Returned value:
2055
Returned value:
2017
  * function does not return value
2056
  * function does not return value
2018
Remarks:
2057
Remarks:
2019
  * The screen working area defines position and coordinates of
2058
  * The screen working area defines position and coordinates of
2020
    a maximized window.
2059
    a maximized window.
2021
  * This function is used only by the application '@taskbar',
2060
  * This function is used only by the application '@taskbar',
2022
    which set working area to all screen without taskbar.
2061
    which set working area to all screen without taskbar.
2023
  * (left,top) are coordinates of the left upper corner,
2062
  * (left,top) are coordinates of the left upper corner,
2024
    (right,bottom) are coordinates of the right lower one.
2063
    (right,bottom) are coordinates of the right lower one.
2025
    Thus the size of working area on x axis can be calculated by
2064
    Thus the size of working area on x axis can be calculated by
2026
    formula right-left+1, on y axis - by formula bottom-right+1.
2065
    formula right-left+1, on y axis - by formula bottom-right+1.
2027
  * If 'left'>='right', x-coordinate of working area is not changed.
2066
  * If 'left'>='right', x-coordinate of working area is not changed.
2028
    If 'left'<0, 'left' will not be set. If 'right' is greater than or
2067
    If 'left'<0, 'left' will not be set. If 'right' is greater than or
2029
    equal to screen width, 'right' will not be set.
2068
    equal to screen width, 'right' will not be set.
2030
    Similarly on y axis.
2069
    Similarly on y axis.
2031
  * See also function 14,
2070
  * See also function 14,
2032
    to get sizes of all screen.
2071
    to get sizes of all screen.
2033
  * There is a pair function to get working area - subfunction 5.
2072
  * There is a pair function to get working area - subfunction 5.
2034
  * This function redraws the screen automatically,
2073
  * This function redraws the screen automatically,
2035
    updating coordinates and sizes of maximized windows.
2074
    updating coordinates and sizes of maximized windows.
2036
    The system sends to all windows redraw message (the event 1).
2075
    The system sends to all windows redraw message (the event 1).
2037
 
2076
 
2038
======================================================================
2077
======================================================================
2039
=========== Function 48, subfunction 7 - get skin margins. ===========
2078
=========== Function 48, subfunction 7 - get skin margins. ===========
2040
======================================================================
2079
======================================================================
2041
Returns the area of a header of a skinned window, intended for
2080
Returns the area of a header of a skinned window, intended for
2042
a text of a header.
2081
a text of a header.
2043
Parameters:
2082
Parameters:
2044
  * eax = 48 - function number
2083
  * eax = 48 - function number
2045
  * ebx = 7 - subfunction number
2084
  * ebx = 7 - subfunction number
2046
Returned value:
2085
Returned value:
2047
  * eax = [left]*65536 + [right]
2086
  * eax = [left]*65536 + [right]
2048
  * ebx = [top]*65536 + [bottom]
2087
  * ebx = [top]*65536 + [bottom]
2049
Remarks:
2088
Remarks:
2050
  * An application decides itself to use or not to use this function.
2089
  * An application decides itself to use or not to use this function.
2051
  * It is recommended to take into account returned value
2090
  * It is recommended to take into account returned value
2052
    of this function for choice of a place for drawing header text
2091
    of this function for choice of a place for drawing header text
2053
    (by function 4) or a substitute of header text
2092
    (by function 4) or a substitute of header text
2054
    (at the discretion of an application).
2093
    (at the discretion of an application).
2055
 
2094
 
2056
======================================================================
2095
======================================================================
2057
============= Function 48, subfunction 8 - set used skin. ============
2096
============= Function 48, subfunction 8 - set used skin. ============
2058
======================================================================
2097
======================================================================
2059
Parameters:
2098
Parameters:
2060
  * eax = 48 - function number
2099
  * eax = 48 - function number
2061
  * ebx = 8 - subfunction number
2100
  * ebx = 8 - subfunction number
2062
  * ecx = pointer to filename of the skin
2101
  * ecx = pointer to filename of the skin
2063
Returned value:
2102
Returned value:
2064
  * eax = 0 - success
2103
  * eax = 0 - success
2065
  * otherwise eax = file system error code; if file does not
2104
  * otherwise eax = file system error code; if file does not
2066
    contain valid skin, function returns error 3
2105
    contain valid skin, function returns error 3
2067
    (unknown file system).
2106
    (unknown file system).
2068
Remarks:
2107
Remarks:
2069
  * After successful skin loading the system sends to all windows
2108
  * After successful skin loading the system sends to all windows
2070
    redraw message (the event 1).
2109
    redraw message (the event 1).
2071
  * At booting the system reads skin from file 'default.skn'
2110
  * At booting the system reads skin from file 'default.skn'
2072
    on ramdisk.
2111
    on ramdisk.
2073
  * User can change the skin statically by creating hisself
2112
  * User can change the skin statically by creating hisself
2074
    'default.skn' or dynamically with the application 'desktop'.
2113
    'default.skn' or dynamically with the application 'desktop'.
2075
 
2114
 
2076
======================================================================
2115
======================================================================
-
 
2116
====== Function 48, subfunction 9 - get font smoothing setting. ======
-
 
2117
======================================================================
-
 
2118
Parameters:
-
 
2119
  * eax = 48 - function number
-
 
2120
  * ebx = 9 - subfunction number
-
 
2121
Returned value:
-
 
2122
  * eax = 2 - subpixel, 1 - anti-aliasing, 0 - off
-
 
2123
 
-
 
2124
======================================================================
-
 
2125
========== Function 48, subfunction 10 - set font smoothing. =========
-
 
2126
======================================================================
-
 
2127
Parameters:
-
 
2128
  * eax = 48 - function number
-
 
2129
  * ebx = 10 - subfunction number
-
 
2130
  * cl  = 2 - subpixel, 1 - anti-aliasing, 0 - off
-
 
2131
 
-
 
2132
======================================================================
-
 
2133
============ Function 48, subfunction 11 - get font size. ============
-
 
2134
======================================================================
-
 
2135
Parameters:
-
 
2136
  * eax = 48 - function number
-
 
2137
  * ebx = 9 - subfunction number
-
 
2138
Returned value:
-
 
2139
  * eax = current font height in pixels
-
 
2140
 
-
 
2141
======================================================================
-
 
2142
============ Function 48, subfunction 12 - set font size. ============
-
 
2143
======================================================================
-
 
2144
Parameters:
-
 
2145
  * eax = 48 - function number
-
 
2146
  * ebx = 10 - subfunction number
-
 
2147
  * cl  = new font height in pixels
-
 
2148
 
-
 
2149
======================================================================
2077
=========== Function 49 - Advanced Power Management (APM). ===========
2150
=========== Function 49 - Advanced Power Management (APM). ===========
2078
======================================================================
2151
======================================================================
2079
Parameters:
2152
Parameters:
2080
  * eax = 49 - function number
2153
  * eax = 49 - function number
2081
  * dx = number of the APM function
2154
  * dx = number of the APM function
2082
    (analogue of ax in APM specification)
2155
    (analogue of ax in APM specification)
2083
  * bx, cx = parameters of the APM function
2156
  * bx, cx = parameters of the APM function
2084
Returned value:
2157
Returned value:
2085
  * 16-bit registers ax, bx, cx, dx, si, di and carry flag CF
2158
  * 16-bit registers ax, bx, cx, dx, si, di and carry flag CF
2086
    are set according to the APM specification
2159
    are set according to the APM specification
2087
  * high halves of 32-bit registers eax, ebx, ecx,
2160
  * high halves of 32-bit registers eax, ebx, ecx,
2088
    edx, esi, edi are destroyed
2161
    edx, esi, edi are destroyed
2089
Remarks:
2162
Remarks:
2090
  * APM 1.2 specification is described in the document
2163
  * APM 1.2 specification is described in the document
2091
    "Advanced Power Management (APM) BIOS Specification"
2164
    "Advanced Power Management (APM) BIOS Specification"
2092
    (Revision 1.2), available at
2165
    (Revision 1.2), available at
2093
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2166
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2094
    besides it is included in famous Interrupt List by Ralf Brown
2167
    besides it is included in famous Interrupt List by Ralf Brown
2095
    (http://www.pobox.com/~ralf/files.html,
2168
    (http://www.pobox.com/~ralf/files.html,
2096
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
2169
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
2097
 
2170
 
2098
======================================================================
2171
======================================================================
2099
=================== Function 50 - set window shape. ==================
2172
=================== Function 50 - set window shape. ==================
2100
======================================================================
2173
======================================================================
2101
Normal windows have rectangular shape. This function can give to
2174
Normal windows have rectangular shape. This function can give to
2102
a window any shape. The shape is given by a set of points inside
2175
a window any shape. The shape is given by a set of points inside
2103
the base rectangle belonging to a window. Position and coordinates
2176
the base rectangle belonging to a window. Position and coordinates
2104
of the base rectangle are set by function 0
2177
of the base rectangle are set by function 0
2105
and changed by function 67.
2178
and changed by function 67.
2106
 
2179
 
2107
--------------------------- Set shape data ---------------------------
2180
--------------------------- Set shape data ---------------------------
2108
Parameters:
2181
Parameters:
2109
  * eax = 50 - function number
2182
  * eax = 50 - function number
2110
  * ebx = 0 - subfunction number
2183
  * ebx = 0 - subfunction number
2111
  * ecx = pointer to shape data (array of bytes 0/1)
2184
  * ecx = pointer to shape data (array of bytes 0/1)
2112
Returned value:
2185
Returned value:
2113
  * function does not return value
2186
  * function does not return value
2114
 
2187
 
2115
-------------------------- Set shape scale ---------------------------
2188
-------------------------- Set shape scale ---------------------------
2116
Parameters:
2189
Parameters:
2117
  * eax = 50 - function number
2190
  * eax = 50 - function number
2118
  * ebx = 1 - subfunction number
2191
  * ebx = 1 - subfunction number
2119
  * ecx sets a scale: each byte of data defines
2192
  * ecx sets a scale: each byte of data defines
2120
    (2^scale)*(2^scale) pixels
2193
    (2^scale)*(2^scale) pixels
2121
Returned value:
2194
Returned value:
2122
  * function does not return value
2195
  * function does not return value
2123
Remarks:
2196
Remarks:
2124
  * Default scale is 0 (scale factor is 1). If in the shape data
2197
  * Default scale is 0 (scale factor is 1). If in the shape data
2125
    one byte corresponds to one pixel, there is no necessity
2198
    one byte corresponds to one pixel, there is no necessity
2126
    to set scale.
2199
    to set scale.
2127
  * Let's designate xsize = window width (in pixels), ysize = height;
2200
  * Let's designate xsize = window width (in pixels), ysize = height;
2128
    pay attention, that they are one pixel more than defined by
2201
    pay attention, that they are one pixel more than defined by
2129
    functions 0, 67.
2202
    functions 0, 67.
2130
  * On definition of scale xsize and ysize must be divisible
2203
  * On definition of scale xsize and ysize must be divisible
2131
    on 2^scale.
2204
    on 2^scale.
2132
  * Byte of data on offset 'a' must be 0/1 and defines belonging
2205
  * Byte of data on offset 'a' must be 0/1 and defines belonging
2133
    to a window of square with the side 2^scale (if scale=0,
2206
    to a window of square with the side 2^scale (if scale=0,
2134
    this is one pixel) and coordinates of the left upper corner
2207
    this is one pixel) and coordinates of the left upper corner
2135
    (a mod (xsize shr scale), a div (xsize shr scale))
2208
    (a mod (xsize shr scale), a div (xsize shr scale))
2136
  * Data size: (xsize shr scale)*(ysize shr scale).
2209
  * Data size: (xsize shr scale)*(ysize shr scale).
2137
  * Data must be presented in the memory and not change
2210
  * Data must be presented in the memory and not change
2138
    after set of shape.
2211
    after set of shape.
2139
  * The system views the shape data at every window redraw by
2212
  * The system views the shape data at every window redraw by
2140
    function 0.
2213
    function 0.
2141
  * The call of subfunction 0 with NULL pointer results in return
2214
  * The call of subfunction 0 with NULL pointer results in return
2142
    to the rectangular shape.
2215
    to the rectangular shape.
2143
 
2216
 
2144
======================================================================
2217
======================================================================
2145
==================== Function 51 - create thread. ====================
2218
==================== Function 51 - create thread. ====================
2146
======================================================================
2219
======================================================================
2147
Parameters:
2220
Parameters:
2148
  * eax = 51 - function number
2221
  * eax = 51 - function number
2149
  * ebx = 1 - unique subfunction
2222
  * ebx = 1 - unique subfunction
2150
  * ecx = address of thread entry point (starting eip)
2223
  * ecx = address of thread entry point (starting eip)
2151
  * edx = pointer to thread stack (starting esp)
2224
  * edx = pointer to thread stack (starting esp)
2152
Returned value:
2225
Returned value:
2153
  * eax = -1 - error (there is too many threads)
2226
  * eax = -1 - error (there is too many threads)
2154
  * otherwise eax = TID - thread identifier
2227
  * otherwise eax = TID - thread identifier
2155
    
2228
    
2156
 
2229
 
2157
======================================================================
2230
======================================================================
2158
==================== Function 54, subfunction 0 ======================
2231
==================== Function 54, subfunction 0 ======================
2159
============== Get the number of slots in the clipboard. =============
2232
============== Get the number of slots in the clipboard. =============
2160
======================================================================
2233
======================================================================
2161
Parameters:
2234
Parameters:
2162
  * eax = 54 - function number
2235
  * eax = 54 - function number
2163
  * ebx = 0 - subfunction number
2236
  * ebx = 0 - subfunction number
2164
Returned value:
2237
Returned value:
2165
  * eax = slots in the clipboard
2238
  * eax = slots in the clipboard
2166
  * eax = -1 - main list area not found
2239
  * eax = -1 - main list area not found
2167
 
2240
 
2168
======================================================================
2241
======================================================================
2169
==================== Function 54, subfunction 1 ======================
2242
==================== Function 54, subfunction 1 ======================
2170
================= Read the data from the clipboard. ==================
2243
================= Read the data from the clipboard. ==================
2171
======================================================================
2244
======================================================================
2172
Parameters:
2245
Parameters:
2173
  * eax = 54 - function number
2246
  * eax = 54 - function number
2174
  * ebx = 1 - subfunction number
2247
  * ebx = 1 - subfunction number
2175
  * eсx = slot number
2248
  * eсx = slot number
2176
Returned value:
2249
Returned value:
2177
  * eax = if successful - pointer to a memory with data
2250
  * eax = if successful - pointer to a memory with data
2178
  * eax = 1 - error
2251
  * eax = 1 - error
2179
  * eax = -1 - main list area not found
2252
  * eax = -1 - main list area not found
2180
 
2253
 
2181
======================================================================
2254
======================================================================
2182
==================== Function 54, subfunction 2 ======================
2255
==================== Function 54, subfunction 2 ======================
2183
================= Write the data to the clipboard. ===================
2256
================= Write the data to the clipboard. ===================
2184
======================================================================
2257
======================================================================
2185
Parameters:
2258
Parameters:
2186
  * eax = 54 - function number
2259
  * eax = 54 - function number
2187
  * ebx = 2 - subfunction number
2260
  * ebx = 2 - subfunction number
2188
  * eсx = the number of bytes to be copied
2261
  * eсx = the number of bytes to be copied
2189
  * edx = a pointer to a buffer for data to be copied
2262
  * edx = a pointer to a buffer for data to be copied
2190
Returned value:
2263
Returned value:
2191
  * eax = 0 - success
2264
  * eax = 0 - success
2192
  * eax = 1 - error
2265
  * eax = 1 - error
2193
  * eax = -1 - main list area not found
2266
  * eax = -1 - main list area not found
2194
 
2267
 
2195
======================================================================
2268
======================================================================
2196
===================== Function 54, subfunction 3 =====================
2269
===================== Function 54, subfunction 3 =====================
2197
================ Delete the last slot in the clipboard ===============
2270
================ Delete the last slot in the clipboard ===============
2198
======================================================================
2271
======================================================================
2199
Parameters:
2272
Parameters:
2200
  * eax = 54 - function number
2273
  * eax = 54 - function number
2201
  * ebx = 3 - subfunction number
2274
  * ebx = 3 - subfunction number
2202
Returned value:
2275
Returned value:
2203
  * eax = 0 - success
2276
  * eax = 0 - success
2204
  * eax = 1 - error
2277
  * eax = 1 - error
2205
  * eax = -1 - main list area not found
2278
  * eax = -1 - main list area not found
2206
  
2279
  
2207
======================================================================
2280
======================================================================
2208
===================== Function 54, subfunction 4 =====================
2281
===================== Function 54, subfunction 4 =====================
2209
===================== Alarm reset the lock buffer ====================
2282
===================== Alarm reset the lock buffer ====================
2210
======================================================================
2283
======================================================================
2211
Parameters:
2284
Parameters:
2212
  * eax = 54 - function number
2285
  * eax = 54 - function number
2213
  * ebx = 4 - subfunction number
2286
  * ebx = 4 - subfunction number
2214
Returned value:
2287
Returned value:
2215
  * eax = 0 - success
2288
  * eax = 0 - success
2216
  * eax = -1 - main list area not found or no blocking
2289
  * eax = -1 - main list area not found or no blocking
2217
Remarks:
2290
Remarks:
2218
  * Used in exceptional cases, where no responsible or killed
2291
  * Used in exceptional cases, where no responsible or killed
2219
    application blocked the clipboard operations.
2292
    application blocked the clipboard operations.
2220
 
2293
 
2221
======================================================================
2294
======================================================================
2222
 Function 55, subfunction 55 - begin to play data on built-in speaker.
2295
 Function 55, subfunction 55 - begin to play data on built-in speaker.
2223
======================================================================
2296
======================================================================
2224
Parameters:
2297
Parameters:
2225
  * eax = 55 - function number
2298
  * eax = 55 - function number
2226
  * ebx = 55 - subfunction number
2299
  * ebx = 55 - subfunction number
2227
  * esi = pointer to data
2300
  * esi = pointer to data
2228
Returned value:
2301
Returned value:
2229
  * eax = 0 - success
2302
  * eax = 0 - success
2230
  * eax = 55 - error (speaker is off or busy)
2303
  * eax = 55 - error (speaker is off or busy)
2231
Data is an array of items with variable length.
2304
Data is an array of items with variable length.
2232
Format of each item is defined by first byte:
2305
Format of each item is defined by first byte:
2233
  * 0 = end of data
2306
  * 0 = end of data
2234
  * 1..0x80 = sets sound duration on 1/100 of second; sound note
2307
  * 1..0x80 = sets sound duration on 1/100 of second; sound note
2235
    is defined by immediate value of frequency
2308
    is defined by immediate value of frequency
2236
    * following word (2 bytes) contains frequency divider;
2309
    * following word (2 bytes) contains frequency divider;
2237
      frequency is defined as 1193180/divider
2310
      frequency is defined as 1193180/divider
2238
  * 0x81 = invalid
2311
  * 0x81 = invalid
2239
  * 0x82..0xFF = note is defined by octave and number:
2312
  * 0x82..0xFF = note is defined by octave and number:
2240
    * duration in 1/100 of second = (first byte)-0x81
2313
    * duration in 1/100 of second = (first byte)-0x81
2241
    * there is one more byte;
2314
    * there is one more byte;
2242
    * (second byte)=0xFF - delay
2315
    * (second byte)=0xFF - delay
2243
    * otherwise it looks like a*0x10+b, where b=number of the note in
2316
    * otherwise it looks like a*0x10+b, where b=number of the note in
2244
      an octave from 1 to 12, a=number of octave (beginning from 0)
2317
      an octave from 1 to 12, a=number of octave (beginning from 0)
2245
Remarks:
2318
Remarks:
2246
  * Speaker play can be disabled/enabled by
2319
  * Speaker play can be disabled/enabled by
2247
    subfunction 8 of function 18.
2320
    subfunction 8 of function 18.
2248
  * Function returns control, having informed the system
2321
  * Function returns control, having informed the system
2249
    an information on request. Play itself goes independently from
2322
    an information on request. Play itself goes independently from
2250
    the program.
2323
    the program.
2251
  * The data must be kept in the memory at least up to the end
2324
  * The data must be kept in the memory at least up to the end
2252
    of play.
2325
    of play.
2253
 
2326
 
2254
======================================================================
2327
======================================================================
2255
======================= Function 57 - PCI BIOS. ======================
2328
======================= Function 57 - PCI BIOS. ======================
2256
======================================================================
2329
======================================================================
2257
Parameters:
2330
Parameters:
2258
  * eax = 57 - function number
2331
  * eax = 57 - function number
2259
  * ebp corresponds to al in PCI BIOS specification
2332
  * ebp corresponds to al in PCI BIOS specification
2260
  * other registers are set according to PCI BIOS specification
2333
  * other registers are set according to PCI BIOS specification
2261
Returned value:
2334
Returned value:
2262
  * CF is undefined
2335
  * CF is undefined
2263
  * other registers are set according to PCI BIOS specification
2336
  * other registers are set according to PCI BIOS specification
2264
Remarks:
2337
Remarks:
2265
  * Many effects of this function can be also achieved with
2338
  * Many effects of this function can be also achieved with
2266
    corresponding subfunctions of function 62.
2339
    corresponding subfunctions of function 62.
2267
  * The function calls PCI32 BIOS extension, documented e.g. in
2340
  * The function calls PCI32 BIOS extension, documented e.g. in
2268
    http://alpha1.dyns.net/files/PCI/bios21.pdf.
2341
    http://alpha1.dyns.net/files/PCI/bios21.pdf.
2269
  * If BIOS does not support this extension, its behavior is emulated
2342
  * If BIOS does not support this extension, its behavior is emulated
2270
    (through kernel-mode analogues of subfunctions of function 62).
2343
    (through kernel-mode analogues of subfunctions of function 62).
2271
 
2344
 
2272
======================================================================
2345
======================================================================
2273
========== Function 60 - Inter Process Communication (IPC). ==========
2346
========== Function 60 - Inter Process Communication (IPC). ==========
2274
======================================================================
2347
======================================================================
2275
IPC is used for message dispatching from one process/thread to
2348
IPC is used for message dispatching from one process/thread to
2276
another. Previously it is necessary to agree how to interpret
2349
another. Previously it is necessary to agree how to interpret
2277
the concrete message.
2350
the concrete message.
2278
 
2351
 
2279
----------- Subfunction 1 - set the area for IPC receiving -----------
2352
----------- Subfunction 1 - set the area for IPC receiving -----------
2280
Is called by process-receiver.
2353
Is called by process-receiver.
2281
Parameters:
2354
Parameters:
2282
  * eax = 60 - function number
2355
  * eax = 60 - function number
2283
  * ebx = 1 - subfunction number
2356
  * ebx = 1 - subfunction number
2284
  * ecx = pointer to the buffer
2357
  * ecx = pointer to the buffer
2285
  * edx = size of the buffer
2358
  * edx = size of the buffer
2286
Returned value:
2359
Returned value:
2287
  * eax = 0 - always success
2360
  * eax = 0 - always success
2288
Format of IPC-buffer:
2361
Format of IPC-buffer:
2289
  * +0: dword: if nonzero, buffer is considered locked;
2362
  * +0: dword: if nonzero, buffer is considered locked;
2290
    lock/unlock the buffer, when you work with it and need that
2363
    lock/unlock the buffer, when you work with it and need that
2291
    buffer data are not changed from outside (no new messages)
2364
    buffer data are not changed from outside (no new messages)
2292
  * +4: dword: occupied place in the buffer (in bytes)
2365
  * +4: dword: occupied place in the buffer (in bytes)
2293
  * +8: first message
2366
  * +8: first message
2294
  * +8+n: second message
2367
  * +8+n: second message
2295
  * ...
2368
  * ...
2296
Format of a message:
2369
Format of a message:
2297
  * +0: dword: PID of sender
2370
  * +0: dword: PID of sender
2298
  * +4: dword: message length (not including this header)
2371
  * +4: dword: message length (not including this header)
2299
  * +8: n*byte: message data
2372
  * +8: n*byte: message data
2300
 
2373
 
2301
------------------ Subfunction 2 - send IPC message ------------------
2374
------------------ Subfunction 2 - send IPC message ------------------
2302
Is called by process-sender.
2375
Is called by process-sender.
2303
Parameters:
2376
Parameters:
2304
  * eax = 60 - function number
2377
  * eax = 60 - function number
2305
  * ebx = 2 - subfunction number
2378
  * ebx = 2 - subfunction number
2306
  * ecx = PID of receiver
2379
  * ecx = PID of receiver
2307
  * edx = pointer to the message data
2380
  * edx = pointer to the message data
2308
  * esi = message length (in bytes)
2381
  * esi = message length (in bytes)
2309
Returned value:
2382
Returned value:
2310
  * eax = 0 - success
2383
  * eax = 0 - success
2311
  * eax = 1 - the receiver has not defined buffer for IPC messages
2384
  * eax = 1 - the receiver has not defined buffer for IPC messages
2312
    (can be, still have no time,
2385
    (can be, still have no time,
2313
    and can be, this is not right process)
2386
    and can be, this is not right process)
2314
  * eax = 2 - the receiver has blocked IPC-buffer; try to wait a bit
2387
  * eax = 2 - the receiver has blocked IPC-buffer; try to wait a bit
2315
  * eax = 3 - overflow of IPC-buffer of the receiver
2388
  * eax = 3 - overflow of IPC-buffer of the receiver
2316
  * eax = 4 - process/thread with such PID does not exist
2389
  * eax = 4 - process/thread with such PID does not exist
2317
Remarks:
2390
Remarks:
2318
  * Immediately after writing of IPC-message to the buffer the system
2391
  * Immediately after writing of IPC-message to the buffer the system
2319
    sends to the receiver the event with code 7 (see event codes).
2392
    sends to the receiver the event with code 7 (see event codes).
2320
 
2393
 
2321
======================================================================
2394
======================================================================
2322
==== Function 61 - get parameters for the direct graphics access. ====
2395
==== Function 61 - get parameters for the direct graphics access. ====
2323
======================================================================
2396
======================================================================
2324
The data of the graphics screen (the memory area which displays
2397
The data of the graphics screen (the memory area which displays
2325
screen contents) are accessible to a program directly, without
2398
screen contents) are accessible to a program directly, without
2326
any system calls, through the selector gs:
2399
any system calls, through the selector gs:
2327
	mov	eax, [gs:0]
2400
        mov     eax, [gs:0]
2328
places in eax the first dword of the buffer, which contains
2401
places in eax the first dword of the buffer, which contains
2329
information on color of the left upper point (and, possibly, colors
2402
information on color of the left upper point (and, possibly, colors
2330
of several following).
2403
of several following).
2331
	mov	[gs:0], eax
2404
        mov     [gs:0], eax
2332
by work in VESA modes with LFB sets color of the left upper point
2405
by work in VESA modes with LFB sets color of the left upper point
2333
(and, possibly, colors of several following).
2406
(and, possibly, colors of several following).
2334
To interpret the data of graphics screen program needs to know
2407
To interpret the data of graphics screen program needs to know
2335
some parameters, returning by this function.
2408
some parameters, returning by this function.
2336
Remarks:
2409
Remarks:
2337
  * Graphics parameters changes very seldom at work,
2410
  * Graphics parameters changes very seldom at work,
2338
    namely, only in cases, when user works with the application VRR.
2411
    namely, only in cases, when user works with the application VRR.
2339
  * At videomode change the system redraws all windows (event
2412
  * At videomode change the system redraws all windows (event
2340
    with code 1) and redraws the background (event 5).
2413
    with code 1) and redraws the background (event 5).
2341
    Same events occur in other cases too, which meet much more often,
2414
    Same events occur in other cases too, which meet much more often,
2342
    than videomode change.
2415
    than videomode change.
2343
  * By operation in videomodes with LFB the selector gs points to
2416
  * By operation in videomodes with LFB the selector gs points to
2344
    LFB itself, so reading/writing on gs result directly in
2417
    LFB itself, so reading/writing on gs result directly in
2345
    change of screen contents. By operation in videomodes without
2418
    change of screen contents. By operation in videomodes without
2346
    LFB gs points to some data area in the kernel, and all functions
2419
    LFB gs points to some data area in the kernel, and all functions
2347
    of screen output fulfil honesty double operation on writing
2420
    of screen output fulfil honesty double operation on writing
2348
    directly to the screen and writing to this buffer. In result
2421
    directly to the screen and writing to this buffer. In result
2349
    at reading contents of this buffer the results correspond to
2422
    at reading contents of this buffer the results correspond to
2350
    screen contents (with, generally speaking, large color
2423
    screen contents (with, generally speaking, large color
2351
    resolution), and writing is ignored.
2424
    resolution), and writing is ignored.
2352
    One exception is the mode 320*200, for which main loop of the
2425
    One exception is the mode 320*200, for which main loop of the
2353
    system thread updates the screen according to mouse movements.
2426
    system thread updates the screen according to mouse movements.
2354
 
2427
 
2355
------------------------- Screen resolution --------------------------
2428
------------------------- Screen resolution --------------------------
2356
Parameters:
2429
Parameters:
2357
  * eax = 61 - function number
2430
  * eax = 61 - function number
2358
  * ebx = 1 - subfunction number
2431
  * ebx = 1 - subfunction number
2359
Returned value:
2432
Returned value:
2360
  * eax = [resolution on x axis]*65536 + [resolution on y axis]
2433
  * eax = [resolution on x axis]*65536 + [resolution on y axis]
2361
Remarks:
2434
Remarks:
2362
  * One can use function 14 paying attention that
2435
  * One can use function 14 paying attention that
2363
    it returns sizes on 1 pixel less. It is fully equivalent way.
2436
    it returns sizes on 1 pixel less. It is fully equivalent way.
2364
 
2437
 
2365
---------------------- Number of bits per pixel ----------------------
2438
---------------------- Number of bits per pixel ----------------------
2366
Parameters:
2439
Parameters:
2367
  * eax = 61 - function number
2440
  * eax = 61 - function number
2368
  * ebx = 2 - subfunction number
2441
  * ebx = 2 - subfunction number
2369
Returned value:
2442
Returned value:
2370
  * eax = number of bits per pixel (24 or 32)
2443
  * eax = number of bits per pixel (24 or 32)
2371
 
2444
 
2372
-------------------- Number of bytes per scanline --------------------
2445
-------------------- Number of bytes per scanline --------------------
2373
Parameters:
2446
Parameters:
2374
  * eax = 61 - function number
2447
  * eax = 61 - function number
2375
  * ebx = 3 - subfunction number
2448
  * ebx = 3 - subfunction number
2376
Returned value:
2449
Returned value:
2377
  * eax = number of bytes occupied by one scanline
2450
  * eax = number of bytes occupied by one scanline
2378
    (horizontal line on the screen)
2451
    (horizontal line on the screen)
2379
 
2452
 
2380
======================================================================
2453
======================================================================
2381
===== Function 62, subfunction 0 - get version of PCI-interface. =====
2454
===== Function 62, subfunction 0 - get version of PCI-interface. =====
2382
======================================================================
2455
======================================================================
2383
Parameters:
2456
Parameters:
2384
  * eax = 62 - function number
2457
  * eax = 62 - function number
2385
  * bl = 0 - subfunction number
2458
  * bl = 0 - subfunction number
2386
Returned value:
2459
Returned value:
2387
  * eax = -1 - PCI access is disabled; otherwise
2460
  * eax = -1 - PCI access is disabled; otherwise
2388
  * ah.al = version of PCI-interface (ah=version, al=subversion)
2461
  * ah.al = version of PCI-interface (ah=version, al=subversion)
2389
  * high word of eax is zeroed
2462
  * high word of eax is zeroed
2390
Remarks:
2463
Remarks:
2391
  * Previously low-level access to PCI for applications must be
2464
  * Previously low-level access to PCI for applications must be
2392
    enabled by subfunction 12 of function 21.
2465
    enabled by subfunction 12 of function 21.
2393
  * If PCI BIOS is not supported, the value of ax is undefined.
2466
  * If PCI BIOS is not supported, the value of ax is undefined.
2394
 
2467
 
2395
======================================================================
2468
======================================================================
2396
==== Function 62, subfunction 1 - get number of the last PCI-bus. ====
2469
==== Function 62, subfunction 1 - get number of the last PCI-bus. ====
2397
======================================================================
2470
======================================================================
2398
Parameters:
2471
Parameters:
2399
  * eax = 62 - function number
2472
  * eax = 62 - function number
2400
  * bl = 1 - subfunction number
2473
  * bl = 1 - subfunction number
2401
Returned value:
2474
Returned value:
2402
  * eax = -1 - access to PCI is disabled; otherwise
2475
  * eax = -1 - access to PCI is disabled; otherwise
2403
  * al = number of the last PCI-bus; other bytes of eax are destroyed
2476
  * al = number of the last PCI-bus; other bytes of eax are destroyed
2404
Remarks:
2477
Remarks:
2405
  * Previously low-level access to PCI for applications must be
2478
  * Previously low-level access to PCI for applications must be
2406
    enabled by subfunction 12 of function 21.
2479
    enabled by subfunction 12 of function 21.
2407
  * If PCI BIOS is not supported, the value of ax is undefined.
2480
  * If PCI BIOS is not supported, the value of ax is undefined.
2408
 
2481
 
2409
======================================================================
2482
======================================================================
2410
===================== Function 62, subfunction 2 =====================
2483
===================== Function 62, subfunction 2 =====================
2411
===== Get mechanism of addressing to the PCI configuration space. ====
2484
===== Get mechanism of addressing to the PCI configuration space. ====
2412
======================================================================
2485
======================================================================
2413
Parameters:
2486
Parameters:
2414
  * eax = 62 - function number
2487
  * eax = 62 - function number
2415
  * bl = 2 - subfunction number
2488
  * bl = 2 - subfunction number
2416
Returned value:
2489
Returned value:
2417
  * eax = -1 - access to PCI is disabled; otherwise
2490
  * eax = -1 - access to PCI is disabled; otherwise
2418
  * al = mechanism (1 or 2); other bytes of eax are destroyed
2491
  * al = mechanism (1 or 2); other bytes of eax are destroyed
2419
Remarks:
2492
Remarks:
2420
  * Previously low-level access to PCI for applications must be
2493
  * Previously low-level access to PCI for applications must be
2421
    enabled by subfunction 12 of function 21.
2494
    enabled by subfunction 12 of function 21.
2422
  * Addressing mechanism is selected depending on
2495
  * Addressing mechanism is selected depending on
2423
    equipment characteristics.
2496
    equipment characteristics.
2424
  * Subfunctions of read and write work automatically
2497
  * Subfunctions of read and write work automatically
2425
    with the selected mechanism.
2498
    with the selected mechanism.
2426
 
2499
 
2427
======================================================================
2500
======================================================================
2428
======== Function 62, subfunctions 4,5,6 - read PCI-register. ========
2501
======== Function 62, subfunctions 4,5,6 - read PCI-register. ========
2429
======================================================================
2502
======================================================================
2430
Parameters:
2503
Parameters:
2431
  * eax = 62 - function number
2504
  * eax = 62 - function number
2432
  * bl = 4 - read byte
2505
  * bl = 4 - read byte
2433
  * bl = 5 - read word
2506
  * bl = 5 - read word
2434
  * bl = 6 - read dword
2507
  * bl = 6 - read dword
2435
  * bh = number of PCI-bus
2508
  * bh = number of PCI-bus
2436
  * ch = dddddfff, where ddddd = number of the device on the bus,
2509
  * ch = dddddfff, where ddddd = number of the device on the bus,
2437
    fff = function number of device
2510
    fff = function number of device
2438
  * cl = number of register (must be even for bl=5,
2511
  * cl = number of register (must be even for bl=5,
2439
    divisible by 4 for bl=6)
2512
    divisible by 4 for bl=6)
2440
Returned value:
2513
Returned value:
2441
  * eax = -1 - error (access to PCI is disabled or parameters
2514
  * eax = -1 - error (access to PCI is disabled or parameters
2442
    are not supported); otherwise
2515
    are not supported); otherwise
2443
  * al/ax/eax (depending on requested size) contains the data;
2516
  * al/ax/eax (depending on requested size) contains the data;
2444
    the other part of register eax is destroyed
2517
    the other part of register eax is destroyed
2445
Remarks:
2518
Remarks:
2446
  * Previously low-level access to PCI for applications must be
2519
  * Previously low-level access to PCI for applications must be
2447
    enabled by subfunction 12 of function 21.
2520
    enabled by subfunction 12 of function 21.
2448
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2521
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2449
    function number. To get access mechanism use subfunction 2.
2522
    function number. To get access mechanism use subfunction 2.
2450
  * Some registers are standard and exist for all devices, some are
2523
  * Some registers are standard and exist for all devices, some are
2451
    defined by the concrete device. The list of registers of the
2524
    defined by the concrete device. The list of registers of the
2452
    first type can be found e.g. in famous
2525
    first type can be found e.g. in famous
2453
    Interrupt List by Ralf Brown
2526
    Interrupt List by Ralf Brown
2454
    (http://www.pobox.com/~ralf/files.html,
2527
    (http://www.pobox.com/~ralf/files.html,
2455
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
2528
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
2456
    registers of the second type must be listed
2529
    registers of the second type must be listed
2457
    in the device documentation.
2530
    in the device documentation.
2458
 
2531
 
2459
======================================================================
2532
======================================================================
2460
====== Function 62, subfunctions 8,9,10 - write to PCI-register. =====
2533
====== Function 62, subfunctions 8,9,10 - write to PCI-register. =====
2461
======================================================================
2534
======================================================================
2462
Parameters:
2535
Parameters:
2463
  * eax = 62 - function number
2536
  * eax = 62 - function number
2464
  * bl = 8 - write byte
2537
  * bl = 8 - write byte
2465
  * bl = 9 - write word
2538
  * bl = 9 - write word
2466
  * bl = 10 - write dword
2539
  * bl = 10 - write dword
2467
  * bh = number of PCI-bus
2540
  * bh = number of PCI-bus
2468
  * ch = dddddfff, where ddddd = number of the device on the bus,
2541
  * ch = dddddfff, where ddddd = number of the device on the bus,
2469
    fff = function number of device
2542
    fff = function number of device
2470
  * cl = number of register (must be even for bl=9,
2543
  * cl = number of register (must be even for bl=9,
2471
    divisible by 4 for bl=10)
2544
    divisible by 4 for bl=10)
2472
  * dl/dx/edx (depending on requested size) contatins
2545
  * dl/dx/edx (depending on requested size) contatins
2473
    the data to write
2546
    the data to write
2474
Returned value:
2547
Returned value:
2475
  * eax = -1 - error (access to PCI is disabled or parameters
2548
  * eax = -1 - error (access to PCI is disabled or parameters
2476
    are not supported)
2549
    are not supported)
2477
  * eax = 0 - success
2550
  * eax = 0 - success
2478
Remarks:
2551
Remarks:
2479
  * Previously low-level access to PCI for applications must be
2552
  * Previously low-level access to PCI for applications must be
2480
    enabled by subfunction 12 of function 21.
2553
    enabled by subfunction 12 of function 21.
2481
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2554
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2482
    function number. To get access mechanism use subfunction 2.
2555
    function number. To get access mechanism use subfunction 2.
2483
  * Some registers are standard and exist for all devices, some are
2556
  * Some registers are standard and exist for all devices, some are
2484
    defined by the concrete device. The list of registers of the
2557
    defined by the concrete device. The list of registers of the
2485
    first type can be found e.g. in famous Interrupt List by
2558
    first type can be found e.g. in famous Interrupt List by
2486
    Ralf Brown; registers of the second type must be listed
2559
    Ralf Brown; registers of the second type must be listed
2487
    in the device documentation.
2560
    in the device documentation.
2488
 
2561
 
2489
======================================================================
2562
======================================================================
2490
============== Function 63 - work with the debug board. ==============
2563
============== Function 63 - work with the debug board. ==============
2491
======================================================================
2564
======================================================================
2492
The debug board is the global system buffer (with the size
2565
The debug board is the global system buffer (with the size
2493
1024 bytes), to which any program can write (generally speaking,
2566
1024 bytes), to which any program can write (generally speaking,
2494
arbitrary) data and from which other program can read these data.
2567
arbitrary) data and from which other program can read these data.
2495
By the agreement written data are text strings interpreted as
2568
By the agreement written data are text strings interpreted as
2496
debug messages on a course of program execution. The kernel in
2569
debug messages on a course of program execution. The kernel in
2497
some situations also writes to the debug board information on
2570
some situations also writes to the debug board information on
2498
execution of some functions; by the agreement kernel messages
2571
execution of some functions; by the agreement kernel messages
2499
begins from the prefix "K : ".
2572
begins from the prefix "K : ".
2500
For view of the debug board the application 'board' was created,
2573
For view of the debug board the application 'board' was created,
2501
which reads data from the buffer and displays them in its window.
2574
which reads data from the buffer and displays them in its window.
2502
'board' interpretes the sequence of codes 13,10 as newline.
2575
'board' interpretes the sequence of codes 13,10 as newline.
2503
A character with null code in an end of line is not necessary,
2576
A character with null code in an end of line is not necessary,
2504
but also does not prevent.
2577
but also does not prevent.
2505
Because debugger has been written, the value of the debug board
2578
Because debugger has been written, the value of the debug board
2506
has decreased, as debugger allows to inspect completely a course of
2579
has decreased, as debugger allows to inspect completely a course of
2507
program execution without any efforts from the direction of program
2580
program execution without any efforts from the direction of program
2508
itself. Nevertheless in some cases the debug board is still useful.
2581
itself. Nevertheless in some cases the debug board is still useful.
2509
 
2582
 
2510
----------------------------- Write byte -----------------------------
2583
----------------------------- Write byte -----------------------------
2511
Parameters:
2584
Parameters:
2512
  * eax = 63 - function number
2585
  * eax = 63 - function number
2513
  * ebx = 1 - subfunction number
2586
  * ebx = 1 - subfunction number
2514
  * cl = data byte
2587
  * cl = data byte
2515
Returned value:
2588
Returned value:
2516
  * function does not return value
2589
  * function does not return value
2517
Remarks:
2590
Remarks:
2518
  * Byte is written to the buffer. Buffer size is 512 bytes.
2591
  * Byte is written to the buffer. Buffer size is 512 bytes.
2519
    At buffer overflow all obtained data are lost.
2592
    At buffer overflow all obtained data are lost.
2520
  * For output to the debug board of more complicated objects
2593
  * For output to the debug board of more complicated objects
2521
    (strings, numbers) it is enough to call this function in cycle.
2594
    (strings, numbers) it is enough to call this function in cycle.
2522
    It is possible not to write the appropriate code manually and use
2595
    It is possible not to write the appropriate code manually and use
2523
    file 'debug.inc', which is included into the distributive.
2596
    file 'debug.inc', which is included into the distributive.
2524
 
2597
 
2525
----------------------------- Read byte ------------------------------
2598
----------------------------- Read byte ------------------------------
2526
Takes away byte from the buffer.
2599
Takes away byte from the buffer.
2527
Parameters:
2600
Parameters:
2528
  * eax = 63 - function number
2601
  * eax = 63 - function number
2529
  * ebx = 2 - subfunction number
2602
  * ebx = 2 - subfunction number
2530
Returned value:
2603
Returned value:
2531
  * eax = ebx = 0 - the buffer is empty
2604
  * eax = ebx = 0 - the buffer is empty
2532
  * eax = byte, ebx = 1 - byte was successfully read
2605
  * eax = byte, ebx = 1 - byte was successfully read
2533
 
2606
 
2534
======================================================================
2607
======================================================================
2535
============== Function 64 - resize application memory. ==============
2608
============== Function 64 - resize application memory. ==============
2536
======================================================================
2609
======================================================================
2537
Parameters:
2610
Parameters:
2538
  * eax = 64 - function number
2611
  * eax = 64 - function number
2539
  * ebx = 1 - unique subfunction
2612
  * ebx = 1 - unique subfunction
2540
  * ecx = new memory size
2613
  * ecx = new memory size
2541
Returned value:
2614
Returned value:
2542
  * eax = 0 - success
2615
  * eax = 0 - success
2543
  * eax = 1 - not enough memory
2616
  * eax = 1 - not enough memory
2544
Remarks:
2617
Remarks:
2545
  * There is another way to dynamically allocate/free memory -
2618
  * There is another way to dynamically allocate/free memory -
2546
    subfunctions 11, 12, 13 of function 68.
2619
    subfunctions 11, 12, 13 of function 68.
2547
  * The function cannot be used together with 68.11, 68.12, 68.13.
2620
  * The function cannot be used together with 68.11, 68.12, 68.13.
2548
    The function call will be ignored after creation of process heap
2621
    The function call will be ignored after creation of process heap
2549
    with function 68.11.
2622
    with function 68.11.
2550
 
2623
 
2551
======================================================================
2624
======================================================================
2552
======== Function 65 - draw image with palette in the window. ========
2625
======== Function 65 - draw image with palette in the window. ========
2553
======================================================================
2626
======================================================================
2554
Parameters:
2627
Parameters:
2555
  * eax = 65 - function number
2628
  * eax = 65 - function number
2556
  * ebx = pointer to the image
2629
  * ebx = pointer to the image
2557
  * ecx = [size on axis x]*65536 + [size on axis y]
2630
  * ecx = [size on axis x]*65536 + [size on axis y]
2558
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2631
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2559
  * esi = number of bits per pixel, must be 1,2,4,8,9,15,16,24 or 32;
2632
  * esi = number of bits per pixel, must be 1,2,4,8,9,15,16,24 or 32;
2560
  * edi = pointer to palette (2 to the power esi colors 0x00RRGGBB);
2633
  * edi = pointer to palette (2 to the power esi colors 0x00RRGGBB);
2561
          ignored when esi > 8
2634
          ignored when esi > 8
2562
  * ebp = offset of next row data relative to previous row data
2635
  * ebp = offset of next row data relative to previous row data
2563
Returned value:
2636
Returned value:
2564
  * function does not return value
2637
  * function does not return value
2565
Remarks:
2638
Remarks:
2566
  * Coordinates of the image are coordinates of the upper left corner
2639
  * Coordinates of the image are coordinates of the upper left corner
2567
    of the image relative to the window.
2640
    of the image relative to the window.
2568
  * Format of image with 1 bit per pixel: each byte of image
2641
  * Format of image with 1 bit per pixel: each byte of image
2569
    (possibly excluding last bytes in rows), contains information on
2642
    (possibly excluding last bytes in rows), contains information on
2570
    the color of 8 pixels, MSB corresponds to first pixel.
2643
    the color of 8 pixels, MSB corresponds to first pixel.
2571
  * Format of image with 2 bits per pixel: each byte of image
2644
  * Format of image with 2 bits per pixel: each byte of image
2572
    (possibly excluding last bytes in rows), contains information on
2645
    (possibly excluding last bytes in rows), contains information on
2573
    the color of 4 pixels, two MSBs correspond to first pixel.
2646
    the color of 4 pixels, two MSBs correspond to first pixel.
2574
  * Format of image with 4 bits per pixel: each byte of image
2647
  * Format of image with 4 bits per pixel: each byte of image
2575
    excluding last bytes in rows (if width is odd) contains
2648
    excluding last bytes in rows (if width is odd) contains
2576
    information on the color of 2 pixels, high-order tetrad
2649
    information on the color of 2 pixels, high-order tetrad
2577
    corresponds to first pixel.
2650
    corresponds to first pixel.
2578
  * Format of image with 8 bits per pixel: each byte of image is
2651
  * Format of image with 8 bits per pixel: each byte of image is
2579
    index in the palette.
2652
    index in the palette.
2580
  * Format of image with 9 bits per pixel: array of one byte values;
2653
  * Format of image with 9 bits per pixel: array of one byte values;
2581
    each byte (8 bit) represents the intensity of gray for one pixel;
2654
    each byte (8 bit) represents the intensity of gray for one pixel;
2582
    this format is equal to 8bpp without palette.
2655
    this format is equal to 8bpp without palette.
2583
  * Format of image with 15 bits per pixel: the color of each pixel
2656
  * Format of image with 15 bits per pixel: the color of each pixel
2584
    is coded as (bit representation) 0RRRRRGGGGGBBBBB - 5 bits per
2657
    is coded as (bit representation) 0RRRRRGGGGGBBBBB - 5 bits per
2585
    each color.
2658
    each color.
2586
  * Format of image with 16 bits per pixel: the color of each pixel
2659
  * Format of image with 16 bits per pixel: the color of each pixel
2587
    is coded as RRRRRGGGGGGBBBBB (5+6+5).
2660
    is coded as RRRRRGGGGGGBBBBB (5+6+5).
2588
  * Format of image with 24 bits per pixel: the color of each pixel
2661
  * Format of image with 24 bits per pixel: the color of each pixel
2589
    is coded as 3 bytes - sequentially blue, green, red components.
2662
    is coded as 3 bytes - sequentially blue, green, red components.
2590
  * Format of image with 32 bits per pixel: similar to 24, but
2663
  * Format of image with 32 bits per pixel: similar to 24, but
2591
    one additional ignored byte is present.
2664
    one additional ignored byte is present.
2592
  * The call to function 7 is equivalent to call to this function
2665
  * The call to function 7 is equivalent to call to this function
2593
    with esi=24, ebp=0.
2666
    with esi=24, ebp=0.
2594
 
2667
 
2595
======================================================================
2668
======================================================================
2596
================== Function 66 - work with keyboard. =================
2669
================== Function 66 - work with keyboard. =================
2597
======================================================================
2670
======================================================================
2598
The input mode influences results of reading keys by function 2.
2671
The input mode influences results of reading keys by function 2.
2599
When a program loads, ASCII input mode is set for it.
2672
When a program loads, ASCII input mode is set for it.
2600
 
2673
 
2601
-------------- Subfunction 1 - set keyboard input mode. --------------
2674
-------------- Subfunction 1 - set keyboard input mode. --------------
2602
Parameters:
2675
Parameters:
2603
  * eax = 66 - function number
2676
  * eax = 66 - function number
2604
  * ebx = 1 - subfunction number
2677
  * ebx = 1 - subfunction number
2605
  * ecx = mode:
2678
  * ecx = mode:
2606
    * 0 = normal (ASCII-characters)
2679
    * 0 = normal (ASCII-characters)
2607
    * 1 = scancodes
2680
    * 1 = scancodes
2608
Returned value:
2681
Returned value:
2609
  * function does not return value
2682
  * function does not return value
2610
 
2683
 
2611
-------------- Subfunction 2 - get keyboard input mode. --------------
2684
-------------- Subfunction 2 - get keyboard input mode. --------------
2612
Parameters:
2685
Parameters:
2613
  * eax = 66 - function number
2686
  * eax = 66 - function number
2614
  * ebx = 2 - subfunction number
2687
  * ebx = 2 - subfunction number
2615
Returned value:
2688
Returned value:
2616
  * eax = current mode
2689
  * eax = current mode
2617
 
2690
 
2618
------------ Subfunction 3 - get status of control keys. -------------
2691
------------ Subfunction 3 - get status of control keys. -------------
2619
Parameters:
2692
Parameters:
2620
  * eax = 66 - function number
2693
  * eax = 66 - function number
2621
  * ebx = 3 - subfunction number
2694
  * ebx = 3 - subfunction number
2622
Returned value:
2695
Returned value:
2623
  * eax = bit mask:
2696
  * eax = bit mask:
2624
  * bit 0  (mask 1): left Shift is pressed
2697
  * bit 0  (mask 1): left Shift is pressed
2625
  * bit 1  (mask 2): right Shift is pressed
2698
  * bit 1  (mask 2): right Shift is pressed
2626
  * bit 2  (mask 4): left Ctrl is pressed
2699
  * bit 2  (mask 4): left Ctrl is pressed
2627
  * bit 3  (mask 8): right Ctrl is pressed
2700
  * bit 3  (mask 8): right Ctrl is pressed
2628
  * bit 4  (mask 0x10): left Alt is pressed
2701
  * bit 4  (mask 0x10): left Alt is pressed
2629
  * bit 5  (mask 0x20): right Alt is pressed
2702
  * bit 5  (mask 0x20): right Alt is pressed
2630
  * bit 6  (mask 0x40): CapsLock is on
2703
  * bit 6  (mask 0x40): CapsLock is on
2631
  * bit 7  (mask 0x80): NumLock is on
2704
  * bit 7  (mask 0x80): NumLock is on
2632
  * bit 8  (mask 0x100): ScrollLock is on
2705
  * bit 8  (mask 0x100): ScrollLock is on
2633
  * bit 9  (mask 0x200): left Win is pressed
2706
  * bit 9  (mask 0x200): left Win is pressed
2634
  * bit 10 (mask 0x400): right Win is pressed
2707
  * bit 10 (mask 0x400): right Win is pressed
2635
  * other bits are cleared
2708
  * other bits are cleared
2636
 
2709
 
2637
-------------- Subfunction 4 - set system-wide hotkey. ---------------
2710
-------------- Subfunction 4 - set system-wide hotkey. ---------------
2638
When hotkey is pressed, the system notifies only those applications,
2711
When hotkey is pressed, the system notifies only those applications,
2639
which have installed it; the active application (which receives
2712
which have installed it; the active application (which receives
2640
all normal input) does not receive such keys.
2713
all normal input) does not receive such keys.
2641
The notification consists in sending event with the code 2.
2714
The notification consists in sending event with the code 2.
2642
Reading hotkey is the same as reading normal key - by function 2.
2715
Reading hotkey is the same as reading normal key - by function 2.
2643
Parameters:
2716
Parameters:
2644
  * eax = 66 - function number
2717
  * eax = 66 - function number
2645
  * ebx = 4 - subfunction number
2718
  * ebx = 4 - subfunction number
2646
  * cl determines key scancode;
2719
  * cl determines key scancode;
2647
    use cl=0 to give combinations such as Ctrl+Shift
2720
    use cl=0 to give combinations such as Ctrl+Shift
2648
  * edx = 0xXYZ determines possible states of control keys:
2721
  * edx = 0xXYZ determines possible states of control keys:
2649
    * Z (low 4 bits) determines state of LShift and RShift:
2722
    * Z (low 4 bits) determines state of LShift and RShift:
2650
      * 0 = no key must be pressed;
2723
      * 0 = no key must be pressed;
2651
      * 1 = exactly one key must be pressed;
2724
      * 1 = exactly one key must be pressed;
2652
      * 2 = both keys must be pressed;
2725
      * 2 = both keys must be pressed;
2653
      * 3 = must be pressed LShift, but not RShift;
2726
      * 3 = must be pressed LShift, but not RShift;
2654
      * 4 = must be pressed RShift, but not LShift
2727
      * 4 = must be pressed RShift, but not LShift
2655
    * Y - similar for LCtrl and RCtrl;
2728
    * Y - similar for LCtrl and RCtrl;
2656
    * X - similar for LAlt and RAlt
2729
    * X - similar for LAlt and RAlt
2657
Returned value:
2730
Returned value:
2658
  * eax=0 - success
2731
  * eax=0 - success
2659
  * eax=1 - too mant hotkeys (maximum 256 are allowed)
2732
  * eax=1 - too mant hotkeys (maximum 256 are allowed)
2660
Remarks:
2733
Remarks:
2661
  * Hotkey can work either at pressing or at release. Release
2734
  * Hotkey can work either at pressing or at release. Release
2662
    scancode of a key is more on 128 than pressing scancode
2735
    scancode of a key is more on 128 than pressing scancode
2663
    (i.e. high bit is set).
2736
    (i.e. high bit is set).
2664
  * Several applications can set the same combination;
2737
  * Several applications can set the same combination;
2665
    all such applications will be informed on pressing
2738
    all such applications will be informed on pressing
2666
    such combination.
2739
    such combination.
2667
 
2740
 
2668
-------------- Subfunction 5 - delete installed hotkey. --------------
2741
-------------- Subfunction 5 - delete installed hotkey. --------------
2669
Parameters:
2742
Parameters:
2670
  * eax = 66 - function number
2743
  * eax = 66 - function number
2671
  * ebx = 5 - subfunction number
2744
  * ebx = 5 - subfunction number
2672
  * cl = scancode of key and edx = 0xXYZ the same as in subfunction 4
2745
  * cl = scancode of key and edx = 0xXYZ the same as in subfunction 4
2673
Returned value:
2746
Returned value:
2674
  * eax = 0 - success
2747
  * eax = 0 - success
2675
  * eax = 1 - there is no such hotkey
2748
  * eax = 1 - there is no such hotkey
2676
Remarks:
2749
Remarks:
2677
  * When a process/thread terminates, all hotkey installed by it are
2750
  * When a process/thread terminates, all hotkey installed by it are
2678
    deleted.
2751
    deleted.
2679
  * The call to this subfunction does not affect other applications.
2752
  * The call to this subfunction does not affect other applications.
2680
    If other application has defined the same combination, it will
2753
    If other application has defined the same combination, it will
2681
    still receive notices.
2754
    still receive notices.
2682
 
2755
 
2683
--------------- Subfunction 6 - block the normal input. --------------
2756
--------------- Subfunction 6 - block the normal input. --------------
2684
Parameters:
2757
Parameters:
2685
  * eax = 66 - function number
2758
  * eax = 66 - function number
2686
  * ebx = 6 - subfunction number
2759
  * ebx = 6 - subfunction number
2687
Returned value:
2760
Returned value:
2688
  * function does not return value
2761
  * function does not return value
2689
Remarks:
2762
Remarks:
2690
  * Blocking the normal keyboard input for installed hotkeys
2763
  * Blocking the normal keyboard input for installed hotkeys
2691
  * To emulate a mouse via the keyboard, the application MOUSEMUL
2764
  * To emulate a mouse via the keyboard, the application MOUSEMUL
2692
 
2765
 
2693
------------ Subfunction 7 - unlock the normal input. ----------------
2766
------------ Subfunction 7 - unlock the normal input. ----------------
2694
Parameters:
2767
Parameters:
2695
  * eax = 66 - function number
2768
  * eax = 66 - function number
2696
  * ebx = 7 - subfunction number
2769
  * ebx = 7 - subfunction number
2697
Returned value:
2770
Returned value:
2698
  * function does not return value
2771
  * function does not return value
2699
Remarks:
2772
Remarks:
2700
  * Unlocking the results of the f. 66.6
2773
  * Unlocking the results of the f. 66.6
2701
  * To emulate a mouse via the keyboard, the application MOUSEMUL
2774
  * To emulate a mouse via the keyboard, the application MOUSEMUL
2702
 
2775
 
2703
======================================================================
2776
======================================================================
2704
========= Function 67 - change position/sizes of the window. =========
2777
========= Function 67 - change position/sizes of the window. =========
2705
======================================================================
2778
======================================================================
2706
Parameters:
2779
Parameters:
2707
  * eax = 67 - function number
2780
  * eax = 67 - function number
2708
  * ebx = new x-coordinate of the window
2781
  * ebx = new x-coordinate of the window
2709
  * ecx = new y-coordinate of the window
2782
  * ecx = new y-coordinate of the window
2710
  * edx = new x-size of the window
2783
  * edx = new x-size of the window
2711
  * esi = new y-size of the window
2784
  * esi = new y-size of the window
2712
Returned value:
2785
Returned value:
2713
  * function does not return value
2786
  * function does not return value
2714
Remarks:
2787
Remarks:
2715
  * The value -1 for a parameter means "do not change"; e.g. to move
2788
  * The value -1 for a parameter means "do not change"; e.g. to move
2716
    the window without resizing it is possible to specify edx=esi=-1.
2789
    the window without resizing it is possible to specify edx=esi=-1.
2717
  * Previously the window must be defined by function 0.
2790
  * Previously the window must be defined by function 0.
2718
    It sets initial coordinates and sizes of the window.
2791
    It sets initial coordinates and sizes of the window.
2719
  * Sizes of the window are understood in sense of function 0,
2792
  * Sizes of the window are understood in sense of function 0,
2720
    that is one pixel less than real sizes.
2793
    that is one pixel less than real sizes.
2721
  * The function call for maximized windows is simply ignored.
2794
  * The function call for maximized windows is simply ignored.
2722
  * For windows of appropriate styles position and/or sizes can be
2795
  * For windows of appropriate styles position and/or sizes can be
2723
    changed by user; current position and sizes can be obtained by
2796
    changed by user; current position and sizes can be obtained by
2724
    call to function 9.
2797
    call to function 9.
2725
  * The function sends to the window redraw event (with the code 1).
2798
  * The function sends to the window redraw event (with the code 1).
2726
 
2799
 
2727
======================================================================
2800
======================================================================
2728
====== Function 68, subfunction 0 - get the task switch counter. =====
2801
====== Function 68, subfunction 0 - get the task switch counter. =====
2729
======================================================================
2802
======================================================================
2730
Parameters:
2803
Parameters:
2731
  * eax = 68 - function number
2804
  * eax = 68 - function number
2732
  * ebx = 0 - subfunction number
2805
  * ebx = 0 - subfunction number
2733
Returned value:
2806
Returned value:
2734
  * eax = number of task switches from the system booting
2807
  * eax = number of task switches from the system booting
2735
    (modulo 2^32)
2808
    (modulo 2^32)
2736
 
2809
 
2737
======================================================================
2810
======================================================================
2738
======= Function 68, subfunction 1 - switch to the next thread. ======
2811
======= Function 68, subfunction 1 - switch to the next thread. ======
2739
======================================================================
2812
======================================================================
2740
The function completes the current time slice allocated to the
2813
The function completes the current time slice allocated to the
2741
thread and switches to the next. (Which thread in which process
2814
thread and switches to the next. (Which thread in which process
2742
will be next, is unpredictable). Later, when execution queue
2815
will be next, is unpredictable). Later, when execution queue
2743
will reach the current thread, execution will be continued.
2816
will reach the current thread, execution will be continued.
2744
Parameters:
2817
Parameters:
2745
  * eax = 68 - function number
2818
  * eax = 68 - function number
2746
  * ebx = 1 - subfunction number
2819
  * ebx = 1 - subfunction number
2747
Returned value:
2820
Returned value:
2748
  * function does not return value
2821
  * function does not return value
2749
 
2822
 
2750
======================================================================
2823
======================================================================
2751
============= Function 68, subfunction 2 - cache + rdpmc. ============
2824
============= Function 68, subfunction 2 - cache + rdpmc. ============
2752
======================================================================
2825
======================================================================
2753
Parameters:
2826
Parameters:
2754
  * eax = 68 - function number
2827
  * eax = 68 - function number
2755
  * ebx = 2 - subfunction number
2828
  * ebx = 2 - subfunction number
2756
  * ecx = required action:
2829
  * ecx = required action:
2757
    * ecx = 0 - enable instruction 'rdpmc'
2830
    * ecx = 0 - enable instruction 'rdpmc'
2758
      (ReaD Performance-Monitoring Counters) for applications
2831
      (ReaD Performance-Monitoring Counters) for applications
2759
    * ecx = 1 - find out whether cache is disabled/enabled
2832
    * ecx = 1 - find out whether cache is disabled/enabled
2760
    * ecx = 2 - enable cache
2833
    * ecx = 2 - enable cache
2761
    * ecx = 3 - disable cache
2834
    * ecx = 3 - disable cache
2762
Returned value:
2835
Returned value:
2763
  * for ecx=0:
2836
  * for ecx=0:
2764
    * eax = the value of cr4
2837
    * eax = the value of cr4
2765
  * for ecx=1:
2838
  * for ecx=1:
2766
    * eax = (cr0 and 0x60000000):
2839
    * eax = (cr0 and 0x60000000):
2767
    * eax = 0 - cache is on
2840
    * eax = 0 - cache is on
2768
    * eax <> 0 - cache is off
2841
    * eax <> 0 - cache is off
2769
  * for ecx=2 and ecx=3:
2842
  * for ecx=2 and ecx=3:
2770
    * function does not return value
2843
    * function does not return value
2771
 
2844
 
2772
======================================================================
2845
======================================================================
2773
=========== Function 68, subfunction 3 - read MSR-register. ==========
2846
=========== Function 68, subfunction 3 - read MSR-register. ==========
2774
======================================================================
2847
======================================================================
2775
MSR = Model Specific Register; the complete list of MSR-registers
2848
MSR = Model Specific Register; the complete list of MSR-registers
2776
of a processor is included to the documentation on it (for example,
2849
of a processor is included to the documentation on it (for example,
2777
IA-32 Intel Architecture Software Developer's Manual,
2850
IA-32 Intel Architecture Software Developer's Manual,
2778
Volume 3, Appendix B); each processor family has its own subset
2851
Volume 3, Appendix B); each processor family has its own subset
2779
of the MSR-registers.
2852
of the MSR-registers.
2780
Parameters:
2853
Parameters:
2781
  * eax = 68 - function number
2854
  * eax = 68 - function number
2782
  * ebx = 3 - subfunction number
2855
  * ebx = 3 - subfunction number
2783
  * ecx is ignored
2856
  * ecx is ignored
2784
  * edx = MSR address
2857
  * edx = MSR address
2785
Returned value:
2858
Returned value:
2786
  * ebx:eax = high:low dword of the result
2859
  * ebx:eax = high:low dword of the result
2787
Remarks:
2860
Remarks:
2788
  * If ecx contains nonexistent or not implemented for this processor
2861
  * If ecx contains nonexistent or not implemented for this processor
2789
    MSR, processor will generate an exception in the kernel, which
2862
    MSR, processor will generate an exception in the kernel, which
2790
    will kill the thread.
2863
    will kill the thread.
2791
  * Previously it is necessary to check, whether MSRs are supported
2864
  * Previously it is necessary to check, whether MSRs are supported
2792
    as a whole, with the instruction 'cpuid'. Otherwise processor
2865
    as a whole, with the instruction 'cpuid'. Otherwise processor
2793
    will generate other exception in the kernel, which will anyway
2866
    will generate other exception in the kernel, which will anyway
2794
    kill the thread.
2867
    kill the thread.
2795
 
2868
 
2796
======================================================================
2869
======================================================================
2797
========= Function 68, subfunction 4 - write to MSR-register. ========
2870
========= Function 68, subfunction 4 - write to MSR-register. ========
2798
======================================================================
2871
======================================================================
2799
MSR = Model Specific Register; the complete list of MSR-registers
2872
MSR = Model Specific Register; the complete list of MSR-registers
2800
of a processor is included to the documentation on it (for example,
2873
of a processor is included to the documentation on it (for example,
2801
IA-32 Intel Architecture Software Developer's Manual,
2874
IA-32 Intel Architecture Software Developer's Manual,
2802
Volume 3, Appendix B); each processor family has its own subset
2875
Volume 3, Appendix B); each processor family has its own subset
2803
of the MSR-registers.
2876
of the MSR-registers.
2804
Parameters:
2877
Parameters:
2805
  * eax = 68 - function number
2878
  * eax = 68 - function number
2806
  * ebx = 4 - subfunction number
2879
  * ebx = 4 - subfunction number
2807
  * ecx is ignored
2880
  * ecx is ignored
2808
  * edx = MSR address
2881
  * edx = MSR address
2809
  * esi:edi = high:low dword
2882
  * esi:edi = high:low dword
2810
Returned value:
2883
Returned value:
2811
  * function does not return value
2884
  * function does not return value
2812
Remarks:
2885
Remarks:
2813
  * If ecx contains nonexistent or not implemented for this processor
2886
  * If ecx contains nonexistent or not implemented for this processor
2814
    MSR, processor will generate an exception in the kernel, which
2887
    MSR, processor will generate an exception in the kernel, which
2815
    will kill the thread.
2888
    will kill the thread.
2816
  * Previously it is necessary to check, whether MSRs are supported
2889
  * Previously it is necessary to check, whether MSRs are supported
2817
    as a whole, with the instruction 'cpuid'. Otherwise processor
2890
    as a whole, with the instruction 'cpuid'. Otherwise processor
2818
    will generate other exception in the kernel, which will anyway
2891
    will generate other exception in the kernel, which will anyway
2819
    kill the thread.
2892
    kill the thread.
2820
 
2893
 
2821
======================================================================
2894
======================================================================
2822
======= Function 68, subfunction 11 - initialize process heap. =======
2895
======= Function 68, subfunction 11 - initialize process heap. =======
2823
======================================================================
2896
======================================================================
2824
Parameters:
2897
Parameters:
2825
  * eax = 68 - function number
2898
  * eax = 68 - function number
2826
  * ebx = 11 - subfunction number
2899
  * ebx = 11 - subfunction number
2827
Returned value:
2900
Returned value:
2828
  * eax = 0 - failed
2901
  * eax = 0 - failed
2829
  * otherwise size of created heap
2902
  * otherwise size of created heap
2830
Remarks:
2903
Remarks:
2831
  * The function call initializes heap, from which one can in future
2904
  * The function call initializes heap, from which one can in future
2832
    allocate and free memory blocks with subfunctions 12 and 13.
2905
    allocate and free memory blocks with subfunctions 12 and 13.
2833
    Heap size is equal to total amount of free application memory.
2906
    Heap size is equal to total amount of free application memory.
2834
  * The second function call from the same process results in
2907
  * The second function call from the same process results in
2835
    returning the size of the existing heap.
2908
    returning the size of the existing heap.
2836
  * After creation of the heap calls to function 64 will be ignored.
2909
  * After creation of the heap calls to function 64 will be ignored.
2837
 
2910
 
2838
======================================================================
2911
======================================================================
2839
======== Function 68, subfunction 12 - allocate memory block. ========
2912
======== Function 68, subfunction 12 - allocate memory block. ========
2840
======================================================================
2913
======================================================================
2841
Parameters:
2914
Parameters:
2842
  * eax = 68 - function number
2915
  * eax = 68 - function number
2843
  * ebx = 12 - subfunction number
2916
  * ebx = 12 - subfunction number
2844
  * ecx = required size in bytes
2917
  * ecx = required size in bytes
2845
Returned value:
2918
Returned value:
2846
  * eax = pointer to the allocated block
2919
  * eax = pointer to the allocated block
2847
Remarks:
2920
Remarks:
2848
  * Before this call one must initialize process heap by call to
2921
  * Before this call one must initialize process heap by call to
2849
    subfunction 11.
2922
    subfunction 11.
2850
  * The function allocates an integer number of pages (4 Kb) in such
2923
  * The function allocates an integer number of pages (4 Kb) in such
2851
    way that the real size of allocated block is more than or equal to
2924
    way that the real size of allocated block is more than or equal to
2852
    requested size.
2925
    requested size.
2853
 
2926
 
2854
======================================================================
2927
======================================================================
2855
========== Function 68, subfunction 13 - free memory block. ==========
2928
========== Function 68, subfunction 13 - free memory block. ==========
2856
======================================================================
2929
======================================================================
2857
Parameters:
2930
Parameters:
2858
  * eax = 68 - function number
2931
  * eax = 68 - function number
2859
  * ebx = 13 - subfunction number
2932
  * ebx = 13 - subfunction number
2860
  * ecx = pointer to the memory block
2933
  * ecx = pointer to the memory block
2861
Returned value:
2934
Returned value:
2862
  * eax = 1 - success
2935
  * eax = 1 - success
2863
  * eax = 0 - failed
2936
  * eax = 0 - failed
2864
Remarks:
2937
Remarks:
2865
  * The memory block must have been allocated by subfunction 12
2938
  * The memory block must have been allocated by subfunction 12
2866
    or subfunction 20.
2939
    or subfunction 20.
2867
 
2940
 
2868
======================================================================
2941
======================================================================
2869
===================== Function 68, subfunction 14 ====================
2942
===================== Function 68, subfunction 14 ====================
2870
============ Wait for signal from another program/driver. ============
2943
============ Wait for signal from another program/driver. ============
2871
======================================================================
2944
======================================================================
2872
Parameters:
2945
Parameters:
2873
  * eax = 68 - function number
2946
  * eax = 68 - function number
2874
  * ebx = 14 - subfunction number
2947
  * ebx = 14 - subfunction number
2875
  * ecx = pointer to the buffer for information (24 bytes)
2948
  * ecx = pointer to the buffer for information (24 bytes)
2876
Returned value:
2949
Returned value:
2877
  * buffer pointed to by ecx contains the following information:
2950
  * buffer pointed to by ecx contains the following information:
2878
    * +0: dword: identifier for following data of signal
2951
    * +0: dword: identifier for following data of signal
2879
    * +4: dword: data of signal (20 bytes), format of which is defined
2952
    * +4: dword: data of signal (20 bytes), format of which is defined
2880
          by the first dword
2953
          by the first dword
2881
 
2954
 
2882
======================================================================
2955
======================================================================
2883
============= Function 68, subfunction 16 - load driver. =============
2956
============= Function 68, subfunction 16 - load driver. =============
2884
======================================================================
2957
======================================================================
2885
Parameters:
2958
Parameters:
2886
  * eax = 68 - function number
2959
  * eax = 68 - function number
2887
  * ebx = 16 - subfunction number
2960
  * ebx = 16 - subfunction number
2888
  * ecx = pointer to ASCIIZ-string with driver name
2961
  * ecx = pointer to ASCIIZ-string with driver name
2889
Returned value:
2962
Returned value:
2890
  * eax = 0 - failed
2963
  * eax = 0 - failed
2891
  * otherwise eax = driver handle
2964
  * otherwise eax = driver handle
2892
Remarks:
2965
Remarks:
2893
  * If the driver was not loaded yet, it is loaded;
2966
  * If the driver was not loaded yet, it is loaded;
2894
    if the driver was loaded yet, nothing happens.
2967
    if the driver was loaded yet, nothing happens.
2895
  * Driver name is case-sensitive.
2968
  * Driver name is case-sensitive.
2896
    Maximum length of the name is 16 characters, including
2969
    Maximum length of the name is 16 characters, including
2897
    terminating null character, the rest is ignored.
2970
    terminating null character, the rest is ignored.
2898
  * Driver ABC is loaded from file /rd/1/drivers/ABC.obj.
2971
  * Driver ABC is loaded from file /rd/1/drivers/ABC.obj.
2899
 
2972
 
2900
======================================================================
2973
======================================================================
2901
============ Function 68, subfunction 17 - driver control. ===========
2974
============ Function 68, subfunction 17 - driver control. ===========
2902
======================================================================
2975
======================================================================
2903
Parameters:
2976
Parameters:
2904
  * eax = 68 - function number
2977
  * eax = 68 - function number
2905
  * ebx = 17 - subfunction number
2978
  * ebx = 17 - subfunction number
2906
  * ecx = pointer to the control structure:
2979
  * ecx = pointer to the control structure:
2907
    * +0: dword: handle of driver
2980
    * +0: dword: handle of driver
2908
    * +4: dword: code of driver function
2981
    * +4: dword: code of driver function
2909
    * +8: dword: pointer to input data
2982
    * +8: dword: pointer to input data
2910
    * +12 = +0xC: dword: size of input data
2983
    * +12 = +0xC: dword: size of input data
2911
    * +16 = +0x10: dword: pointer to output data
2984
    * +16 = +0x10: dword: pointer to output data
2912
    * +20 = +0x14: dword: size of output data
2985
    * +20 = +0x14: dword: size of output data
2913
Returned value:
2986
Returned value:
2914
  * eax = determined by driver
2987
  * eax = determined by driver
2915
Remarks:
2988
Remarks:
2916
  * Function codes and the structure of input/output data
2989
  * Function codes and the structure of input/output data
2917
    are defined by driver.
2990
    are defined by driver.
2918
  * Previously one must obtain driver handle by subfunction 16.
2991
  * Previously one must obtain driver handle by subfunction 16.
2919
 
2992
 
2920
======================================================================
2993
======================================================================
2921
=============== Function 68, subfunction 19 - load DLL. ==============
2994
=============== Function 68, subfunction 19 - load DLL. ==============
2922
======================================================================
2995
======================================================================
2923
Parameters:
2996
Parameters:
2924
  * eax = 68 - function number
2997
  * eax = 68 - function number
2925
  * ebx = 19 - subfunction number
2998
  * ebx = 19 - subfunction number
2926
  * ecx = pointer to ASCIIZ-string with the full path to DLL
2999
  * ecx = pointer to ASCIIZ-string with the full path to DLL
2927
Returned value:
3000
Returned value:
2928
  * eax = 0 - failed
3001
  * eax = 0 - failed
2929
  * otherwise eax = pointer to DLL export table
3002
  * otherwise eax = pointer to DLL export table
2930
Remarks:
3003
Remarks:
2931
  * Export table is an array of structures of 2 dword's, terminated
3004
  * Export table is an array of structures of 2 dword's, terminated
2932
    by zero. The first dword in structure points to function name,
3005
    by zero. The first dword in structure points to function name,
2933
    the second dword contains address of function.
3006
    the second dword contains address of function.
2934
 
3007
 
2935
======================================================================
3008
======================================================================
2936
======= Function 68, subfunction 20 - reallocate memory block. =======
3009
======= Function 68, subfunction 20 - reallocate memory block. =======
2937
======================================================================
3010
======================================================================
2938
Parameters:
3011
Parameters:
2939
  * eax = 68 - function number
3012
  * eax = 68 - function number
2940
  * ebx = 20 - subfunction number
3013
  * ebx = 20 - subfunction number
2941
  * ecx = new size in bytes
3014
  * ecx = new size in bytes
2942
  * edx = pointer to already allocated block
3015
  * edx = pointer to already allocated block
2943
Returned value:
3016
Returned value:
2944
  * eax = pointer to the reallocated block, 0 = error
3017
  * eax = pointer to the reallocated block, 0 = error
2945
Remarks:
3018
Remarks:
2946
  * Before this call one must initialize process heap by call to
3019
  * Before this call one must initialize process heap by call to
2947
    subfunction 11.
3020
    subfunction 11.
2948
  * The function allocates an integer number of pages (4 Kb) in such
3021
  * The function allocates an integer number of pages (4 Kb) in such
2949
    way that the real size of allocated block is more than or equal to
3022
    way that the real size of allocated block is more than or equal to
2950
    requested size.
3023
    requested size.
2951
  * If edx=0, the function call is equivalent to memory allocation
3024
  * If edx=0, the function call is equivalent to memory allocation
2952
    with subfunction 12. Otherwise the block at edx
3025
    with subfunction 12. Otherwise the block at edx
2953
    must be allocated earlier with subfunction 12 or this subfunction.
3026
    must be allocated earlier with subfunction 12 or this subfunction.
2954
  * If ecx=0, the function frees memory block at edx and returns 0.
3027
  * If ecx=0, the function frees memory block at edx and returns 0.
2955
  * The contents of the block are unchanged up to the shorter of
3028
  * The contents of the block are unchanged up to the shorter of
2956
    the new and old sizes.
3029
    the new and old sizes.
2957
 
3030
 
2958
======================================================================
3031
======================================================================
2959
=========== Function 68, subfunction 21 - load driver PE. ============
3032
=========== Function 68, subfunction 21 - load driver PE. ============
2960
======================================================================
3033
======================================================================
2961
Parameters:
3034
Parameters:
2962
  * eax = 68 - function number
3035
  * eax = 68 - function number
2963
  * ebx = 21 - subfunction number
3036
  * ebx = 21 - subfunction number
2964
  * ecx = pointer to ASCIIZ-string with driver name
3037
  * ecx = pointer to ASCIIZ-string with driver name
2965
  * edx = pointer to command line
3038
  * edx = pointer to command line
2966
Returned value:
3039
Returned value:
2967
  * eax = 0 - failed
3040
  * eax = 0 - failed
2968
  * otherwise eax = driver handle
3041
  * otherwise eax = driver handle
2969
Remarks:
3042
Remarks:
2970
  * If the driver was not loaded yet, it is loaded;
3043
  * If the driver was not loaded yet, it is loaded;
2971
    if the driver was loaded yet, nothing happens.
3044
    if the driver was loaded yet, nothing happens.
2972
 
3045
 
2973
======================================================================
3046
======================================================================
2974
======== Function 68, subfunction 22 - open named memory area. =======
3047
======== Function 68, subfunction 22 - open named memory area. =======
2975
======================================================================
3048
======================================================================
2976
Parameters:
3049
Parameters:
2977
  * eax = 68 - function number
3050
  * eax = 68 - function number
2978
  * ebx = 22 - subfunction number
3051
  * ebx = 22 - subfunction number
2979
  * ecx = area name. Maximum of 31 characters with terminating zero
3052
  * ecx = area name. Maximum of 31 characters with terminating zero
2980
  * edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
3053
  * edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
2981
  * esi = flags for open and access:
3054
  * esi = flags for open and access:
2982
    * SHM_OPEN        = 0x00 - open existing memory area. If an area
3055
    * SHM_OPEN        = 0x00 - open existing memory area. If an area
2983
                          with such name does not exist, the function
3056
                          with such name does not exist, the function
2984
                          will return error code 5.
3057
                          will return error code 5.
2985
    * SHM_OPEN_ALWAYS = 0x04 - open existing or create new
3058
    * SHM_OPEN_ALWAYS = 0x04 - open existing or create new
2986
                          memory area.
3059
                          memory area.
2987
    * SHM_CREATE      = 0x08 - create new memory area. If an area
3060
    * SHM_CREATE      = 0x08 - create new memory area. If an area
2988
                          with such name already exists, the function
3061
                          with such name already exists, the function
2989
                          will return error code 10.
3062
                          will return error code 10.
2990
    * SHM_READ        = 0x00 - only read access
3063
    * SHM_READ        = 0x00 - only read access
2991
    * SHM_WRITE       = 0x01 - read and write access
3064
    * SHM_WRITE       = 0x01 - read and write access
2992
Returned value:
3065
Returned value:
2993
  * eax = pointer to memory area, 0 if error has occured
3066
  * eax = pointer to memory area, 0 if error has occured
2994
  * if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS):
3067
  * if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS):
2995
    edx = 0 - success, otherwise - error code
3068
    edx = 0 - success, otherwise - error code
2996
  * if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS):
3069
  * if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS):
2997
    edx = error code (if eax=0) or area size in bytes
3070
    edx = error code (if eax=0) or area size in bytes
2998
Error codes:
3071
Error codes:
2999
  * E_NOTFOUND = 5
3072
  * E_NOTFOUND = 5
3000
  * E_ACCESS = 10
3073
  * E_ACCESS = 10
3001
  * E_NOMEM = 30
3074
  * E_NOMEM = 30
3002
  * E_PARAM = 33
3075
  * E_PARAM = 33
3003
Remarks:
3076
Remarks:
3004
  * Before this call one must initialize process heap by call to
3077
  * Before this call one must initialize process heap by call to
3005
    subfunction 11.
3078
    subfunction 11.
3006
  * If a new area is created, access flags set maximal rights
3079
  * If a new area is created, access flags set maximal rights
3007
    for other processes. An attempt from other process to open
3080
    for other processes. An attempt from other process to open
3008
    with denied rights will fail with error code E_ACCESS.
3081
    with denied rights will fail with error code E_ACCESS.
3009
  * The process which has created an area always has write access.
3082
  * The process which has created an area always has write access.
3010
 
3083
 
3011
======================================================================
3084
======================================================================
3012
======= Function 68, subfunction 23 - close named memory area. =======
3085
======= Function 68, subfunction 23 - close named memory area. =======
3013
======================================================================
3086
======================================================================
3014
Parameters:
3087
Parameters:
3015
  * eax = 68 - function number
3088
  * eax = 68 - function number
3016
  * ebx = 23 - subfunction number
3089
  * ebx = 23 - subfunction number
3017
  * ecx = area name. Maximum of 31 characters with terminating zero
3090
  * ecx = area name. Maximum of 31 characters with terminating zero
3018
Returned value:
3091
Returned value:
3019
  * eax destroyed
3092
  * eax destroyed
3020
Remarks:
3093
Remarks:
3021
  * A memory area is physically freed (with deleting all data and
3094
  * A memory area is physically freed (with deleting all data and
3022
    freeing physical memory), when all threads which have opened
3095
    freeing physical memory), when all threads which have opened
3023
    this area will close it.
3096
    this area will close it.
3024
  * When thread is terminating, all opened by it areas are closed.
3097
  * When thread is terminating, all opened by it areas are closed.
3025
 
3098
 
3026
======================================================================
3099
======================================================================
3027
======== Function 68, subfunction 24 - set exception handler. ========
3100
======== Function 68, subfunction 24 - set exception handler. ========
3028
======================================================================
3101
======================================================================
3029
Parameters:
3102
Parameters:
3030
  * eax = 68 - function number
3103
  * eax = 68 - function number
3031
  * ebx = 24 - subfunction number
3104
  * ebx = 24 - subfunction number
3032
  * ecx = address of the new exception handler
3105
  * ecx = address of the new exception handler
3033
  * edx = the mask of handled exceptions
3106
  * edx = the mask of handled exceptions
3034
Returned value:
3107
Returned value:
3035
  * eax = address of the old exception handler (0, if it was not set)
3108
  * eax = address of the old exception handler (0, if it was not set)
3036
  * ebx = the old mask of handled exceptions
3109
  * ebx = the old mask of handled exceptions
3037
Remarks:
3110
Remarks:
3038
  * Bit number in mask of exceptions corresponds to exception number
3111
  * Bit number in mask of exceptions corresponds to exception number
3039
    in CPU-specification (Intel-PC). For example, FPU exceptions have
3112
    in CPU-specification (Intel-PC). For example, FPU exceptions have
3040
    number 16 (#MF), and SSE exceptions - 19 (#XF).
3113
    number 16 (#MF), and SSE exceptions - 19 (#XF).
3041
  * The current implementation ignores the inquiry for hook of 7
3114
  * The current implementation ignores the inquiry for hook of 7
3042
    exception - the system handles #NM by its own.
3115
    exception - the system handles #NM by its own.
3043
  * The exception handler is called with exception number as first
3116
  * The exception handler is called with exception number as first
3044
    (and only) stack parameter. So, correct exit from the handler is
3117
    (and only) stack parameter. So, correct exit from the handler is
3045
    RET 4. It returns to the instruction, that caused the exception,
3118
    RET 4. It returns to the instruction, that caused the exception,
3046
    for faults, and to the next instruction for traps (see
3119
    for faults, and to the next instruction for traps (see
3047
    classification of exceptions in CPU specification).
3120
    classification of exceptions in CPU specification).
3048
  * When user handler receives control, the corresponding bit in
3121
  * When user handler receives control, the corresponding bit in
3049
    the exception mask is cleared. Raising this exception
3122
    the exception mask is cleared. Raising this exception
3050
    in consequence leads to default handling, that is,
3123
    in consequence leads to default handling, that is,
3051
    terminating the application in absence of debugger or
3124
    terminating the application in absence of debugger or
3052
    suspend with notification of debugger otherwise.
3125
    suspend with notification of debugger otherwise.
3053
  * After user handler completes critical operations, it can set
3126
  * After user handler completes critical operations, it can set
3054
    the corresponding bit in the exception mask with subfunction 25.
3127
    the corresponding bit in the exception mask with subfunction 25.
3055
    Also user handler is responsible for clearing exceptions flags in
3128
    Also user handler is responsible for clearing exceptions flags in
3056
    FPU and/or SSE.
3129
    FPU and/or SSE.
3057
 
3130
 
3058
======================================================================
3131
======================================================================
3059
====== Function 68, subfunction 25 - set FPU exception handler. ======
3132
======== Function 68, subfunction 25 - set exception activity ========
3060
======================================================================
3133
======================================================================
3061
Parameters:
3134
Parameters:
3062
  * eax = 68 - function number
3135
  * eax = 68 - function number
3063
  * ebx = 25 - subfunction number
3136
  * ebx = 25 - subfunction number
3064
  * ecx = signal number
3137
  * ecx = signal number
3065
  * edx = value of activity (0/1)
3138
  * edx = value of activity (0/1)
3066
Returned value:
3139
Returned value:
3067
  * eax = -1 - invalid signal number
3140
  * eax = -1 - invalid signal number
3068
  * otherwise eax = old value of activity for this signal (0/1)
3141
  * otherwise eax = old value of activity for this signal (0/1)
3069
Remarks:
3142
Remarks:
3070
  * In current implementation only mask for user excepton handler,
3143
  * In current implementation only mask for user excepton handler,
3071
    which has been previously set by subfunction 24,
3144
    which has been previously set by subfunction 24,
3072
    is changed. Signal number corresponds to exception number.
3145
    is changed. Signal number corresponds to exception number.
3073
 
3146
 
3074
======================================================================
3147
======================================================================
3075
====== Function 68, subfunction 26 - release memory pages ============
3148
====== Function 68, subfunction 26 - release memory pages ============
3076
======================================================================
3149
======================================================================
3077
Parameters:
3150
Parameters:
3078
  * eax = 68 - function number
3151
  * eax = 68 - function number
3079
  * ebx = 26 - subfunction number
3152
  * ebx = 26 - subfunction number
3080
  * ecx = pointer to the memory block, allocated by subfunction 12
3153
  * ecx = pointer to the memory block, allocated by subfunction 12
3081
  * edx = offset from the block beginnings
3154
  * edx = offset from the block beginnings
3082
  * esi = the size of the region of memory to release, in bytes
3155
  * esi = the size of the region of memory to release, in bytes
3083
Remarks:
3156
Remarks:
3084
  * function release range of pages from ecx+edx to ecx+edx+esi
3157
  * function release range of pages from ecx+edx to ecx+edx+esi
3085
    and set virtual memory into reserved state.
3158
    and set virtual memory into reserved state.
3086
 
3159
 
3087
======================================================================
3160
======================================================================
3088
========== Function 68, subfunction 27 - load file ===================
3161
========== Function 68, subfunction 27 - load file ===================
3089
======================================================================
3162
======================================================================
3090
Parameters:
3163
Parameters:
3091
  * eax = 68 - function number
3164
  * eax = 68 - function number
3092
  * ebx = 27 - subfunction number
3165
  * ebx = 27 - subfunction number
3093
  * ecx = pointer to ASCIIZ-string with the filename
3166
  * ecx = pointer to ASCIIZ-string with the filename
3094
Returned value:
3167
Returned value:
3095
  * eax = pointer to the loaded file, or zero
3168
  * eax = pointer to the loaded file, or zero
3096
  * edx = size of the loaded file, or zero
3169
  * edx = size of the loaded file, or zero
3097
Remarks:
3170
Remarks:
3098
  * function loads file and unpacks, if necessary
3171
  * function loads file and unpacks, if necessary
3099
 
3172
 
3100
======================================================================
3173
======================================================================
3101
====================== Function 69 - debugging. ======================
3174
====================== Function 69 - debugging. ======================
3102
======================================================================
3175
======================================================================
3103
A process can load other process as debugged by set of corresponding
3176
A process can load other process as debugged by set of corresponding
3104
bit by call to subfunction 7 of function 70.
3177
bit by call to subfunction 7 of function 70.
3105
A process can have only one debugger; one process can debug some
3178
A process can have only one debugger; one process can debug some
3106
others. The system notifies debugger on events occuring with
3179
others. The system notifies debugger on events occuring with
3107
debugged process. Messages are written to the buffer defined by
3180
debugged process. Messages are written to the buffer defined by
3108
subfunction 0.
3181
subfunction 0.
3109
Format of a message:
3182
Format of a message:
3110
  * +0: dword: message code
3183
  * +0: dword: message code
3111
  * +4: dword: PID of debugged process
3184
  * +4: dword: PID of debugged process
3112
  * +8: there can be additional data depending on message code
3185
  * +8: there can be additional data depending on message code
3113
Message codes:
3186
Message codes:
3114
  * 1 = exception
3187
  * 1 = exception
3115
    * in addition dword-number of the exception is given
3188
    * in addition dword-number of the exception is given
3116
    * process is suspended
3189
    * process is suspended
3117
  * 2 = process has terminated
3190
  * 2 = process has terminated
3118
    * comes at any termination: both through the system function -1,
3191
    * comes at any termination: both through the system function -1,
3119
      and at "murder" by any other process (including debugger itself)
3192
      and at "murder" by any other process (including debugger itself)
3120
  * 3 = debug exception int 1 = #DB
3193
  * 3 = debug exception int 1 = #DB
3121
    * in addition dword-image of the register DR6 is given:
3194
    * in addition dword-image of the register DR6 is given:
3122
      * bits 0-3: condition of the corresponding breakpoint (set by
3195
      * bits 0-3: condition of the corresponding breakpoint (set by
3123
        subfunction 9) is satisfied
3196
        subfunction 9) is satisfied
3124
      * bit 14: exception has occured because of the trace mode
3197
      * bit 14: exception has occured because of the trace mode
3125
        (flag TF is set TF)
3198
        (flag TF is set TF)
3126
    * process is suspended
3199
    * process is suspended
3127
When debugger terminates, all debugged processes are killed.
3200
When debugger terminates, all debugged processes are killed.
3128
If debugger does not want this, it must previously detach by
3201
If debugger does not want this, it must previously detach by
3129
subfunction 3.
3202
subfunction 3.
3130
 
3203
 
3131
All subfunctions are applicable only to processes/threads started
3204
All subfunctions are applicable only to processes/threads started
3132
from the current by function 70 with set debugging flag.
3205
from the current by function 70 with set debugging flag.
3133
Debugging of multithreaded programs is not supported yet.
3206
Debugging of multithreaded programs is not supported yet.
3134
The full list of subfunctions:
3207
The full list of subfunctions:
3135
  * subfunction 0 - define data area for debug messages
3208
  * subfunction 0 - define data area for debug messages
3136
  * subfunction 1 - get contents of registers of debugged thread
3209
  * subfunction 1 - get contents of registers of debugged thread
3137
  * subfunction 2 - set contents of registers of debugged thread
3210
  * subfunction 2 - set contents of registers of debugged thread
3138
  * subfunction 3 - detach from debugged process
3211
  * subfunction 3 - detach from debugged process
3139
  * subfunction 4 - suspend debugged thread
3212
  * subfunction 4 - suspend debugged thread
3140
  * subfunction 5 - resume debugged thread
3213
  * subfunction 5 - resume debugged thread
3141
  * subfunction 6 - read from the memory of debugged process
3214
  * subfunction 6 - read from the memory of debugged process
3142
  * subfunction 7 - write to the memory of debugged process
3215
  * subfunction 7 - write to the memory of debugged process
3143
  * subfunction 8 - terminate debugged thread
3216
  * subfunction 8 - terminate debugged thread
3144
  * subfunction 9 - set/clear hardware breakpoint
3217
  * subfunction 9 - set/clear hardware breakpoint
3145
 
3218
 
3146
======================================================================
3219
======================================================================
3147
= Function 69, subfunction 0 - define data area fror debug messages. =
3220
= Function 69, subfunction 0 - define data area fror debug messages. =
3148
======================================================================
3221
======================================================================
3149
Parameters:
3222
Parameters:
3150
  * eax = 69 - function number
3223
  * eax = 69 - function number
3151
  * ebx = 0 - subfunction number
3224
  * ebx = 0 - subfunction number
3152
  * ecx = pointer
3225
  * ecx = pointer
3153
Format of data area:
3226
Format of data area:
3154
  * +0: dword: N = buffer size (not including this header)
3227
  * +0: dword: N = buffer size (not including this header)
3155
  * +4: dword: occupied place
3228
  * +4: dword: occupied place
3156
  * +8: N*byte: buffer
3229
  * +8: N*byte: buffer
3157
Returned value:
3230
Returned value:
3158
  * function does not return value
3231
  * function does not return value
3159
Remarks:
3232
Remarks:
3160
  * If the size field is negative, the buffer is considered locked
3233
  * If the size field is negative, the buffer is considered locked
3161
    and at arrival of new message the system will wait.
3234
    and at arrival of new message the system will wait.
3162
    For synchronization frame all work with the buffer by operations
3235
    For synchronization frame all work with the buffer by operations
3163
    lock/unlock
3236
    lock/unlock
3164
    	neg	[bufsize]
3237
        neg     [bufsize]
3165
  * Data in the buffer are considered as array of items with variable
3238
  * Data in the buffer are considered as array of items with variable
3166
    length - messages. Format of a message is explained in
3239
    length - messages. Format of a message is explained in
3167
    general description.
3240
    general description.
3168
 
3241
 
3169
======================================================================
3242
======================================================================
3170
===================== Function 69, subfunction 1 =====================
3243
===================== Function 69, subfunction 1 =====================
3171
============ Get contents of registers of debugged thread. ===========
3244
============ Get contents of registers of debugged thread. ===========
3172
======================================================================
3245
======================================================================
3173
Parameters:
3246
Parameters:
3174
  * eax = 69 - function number
3247
  * eax = 69 - function number
3175
  * ebx = 1 - subfunction number
3248
  * ebx = 1 - subfunction number
3176
  * ecx = thread identifier
3249
  * ecx = thread identifier
3177
  * edx = size of context structure, must be 0x28=40 bytes
3250
  * edx = size of context structure, must be 0x28=40 bytes
3178
  * esi = pointer to context structure
3251
  * esi = pointer to context structure
3179
Returned value:
3252
Returned value:
3180
  * function does not return value
3253
  * function does not return value
3181
Format of context structure: (FPU is not supported yet)
3254
Format of context structure: (FPU is not supported yet)
3182
  * +0: dword: eip
3255
  * +0: dword: eip
3183
  * +4: dword: eflags
3256
  * +4: dword: eflags
3184
  * +8: dword: eax
3257
  * +8: dword: eax
3185
  * +12 = +0xC: dword: ecx
3258
  * +12 = +0xC: dword: ecx
3186
  * +16 = +0x10: dword: edx
3259
  * +16 = +0x10: dword: edx
3187
  * +20 = +0x14: dword: ebx
3260
  * +20 = +0x14: dword: ebx
3188
  * +24 = +0x18: dword: esp
3261
  * +24 = +0x18: dword: esp
3189
  * +28 = +0x1C: dword: ebp
3262
  * +28 = +0x1C: dword: ebp
3190
  * +32 = +0x20: dword: esi
3263
  * +32 = +0x20: dword: esi
3191
  * +36 = +0x24: dword: edi
3264
  * +36 = +0x24: dword: edi
3192
Remarks:
3265
Remarks:
3193
  * If the thread executes code of ring-0, the function returns
3266
  * If the thread executes code of ring-0, the function returns
3194
    contents of registers of ring-3.
3267
    contents of registers of ring-3.
3195
  * Process must be loaded for debugging (as is shown in
3268
  * Process must be loaded for debugging (as is shown in
3196
    general description).
3269
    general description).
3197
 
3270
 
3198
======================================================================
3271
======================================================================
3199
===================== Function 69, subfunction 2 =====================
3272
===================== Function 69, subfunction 2 =====================
3200
============ Set contents of registers of debugged thread. ===========
3273
============ Set contents of registers of debugged thread. ===========
3201
======================================================================
3274
======================================================================
3202
Parameters:
3275
Parameters:
3203
  * eax = 69 - function number
3276
  * eax = 69 - function number
3204
  * ebx = 2 - subfunction number
3277
  * ebx = 2 - subfunction number
3205
  * ecx = thread identifier
3278
  * ecx = thread identifier
3206
  * edx = size of context structure, must be 0x28=40 bytes
3279
  * edx = size of context structure, must be 0x28=40 bytes
3207
Returned value:
3280
Returned value:
3208
  * function does not return value
3281
  * function does not return value
3209
Format of context structure is shown in the description of
3282
Format of context structure is shown in the description of
3210
subfunction 1.
3283
subfunction 1.
3211
Remarks:
3284
Remarks:
3212
  * If the thread executes code of ring-0, the function returns
3285
  * If the thread executes code of ring-0, the function returns
3213
    contents of registers of ring-3.
3286
    contents of registers of ring-3.
3214
  * Process must be loaded for debugging (as is shown in
3287
  * Process must be loaded for debugging (as is shown in
3215
    general description).
3288
    general description).
3216
 
3289
 
3217
======================================================================
3290
======================================================================
3218
===== Function 69, subfunction 3 - detach from debugged process. =====
3291
===== Function 69, subfunction 3 - detach from debugged process. =====
3219
======================================================================
3292
======================================================================
3220
Parameters:
3293
Parameters:
3221
  * eax = 69 - function number
3294
  * eax = 69 - function number
3222
  * ebx = 3 - subfunction number
3295
  * ebx = 3 - subfunction number
3223
  * ecx = identifier
3296
  * ecx = identifier
3224
Returned value:
3297
Returned value:
3225
  * function does not return value
3298
  * function does not return value
3226
Remarks:
3299
Remarks:
3227
  * If the process was suspended, it resumes execution.
3300
  * If the process was suspended, it resumes execution.
3228
 
3301
 
3229
======================================================================
3302
======================================================================
3230
======== Function 69, subfunction 4 - suspend debugged thread. =======
3303
======== Function 69, subfunction 4 - suspend debugged thread. =======
3231
======================================================================
3304
======================================================================
3232
Parameters:
3305
Parameters:
3233
  * eax = 69 - function number
3306
  * eax = 69 - function number
3234
  * ebx = 4 - subfunction number
3307
  * ebx = 4 - subfunction number
3235
  * ecx = thread identifier
3308
  * ecx = thread identifier
3236
Returned value:
3309
Returned value:
3237
  * function does not return value
3310
  * function does not return value
3238
Remarks:
3311
Remarks:
3239
  * Process must be loaded for debugging (as is shown in
3312
  * Process must be loaded for debugging (as is shown in
3240
    general description).
3313
    general description).
3241
 
3314
 
3242
======================================================================
3315
======================================================================
3243
======== Function 69, subfunction 5 - resume debugged thread. ========
3316
======== Function 69, subfunction 5 - resume debugged thread. ========
3244
======================================================================
3317
======================================================================
3245
Parameters:
3318
Parameters:
3246
  * eax = 69 - function number
3319
  * eax = 69 - function number
3247
  * ebx = 5 - subfunction number
3320
  * ebx = 5 - subfunction number
3248
  * ecx = thread identifier
3321
  * ecx = thread identifier
3249
Returned value:
3322
Returned value:
3250
  * function does not return value
3323
  * function does not return value
3251
Remarks:
3324
Remarks:
3252
  * Process must be loaded for debugging (as is shown in
3325
  * Process must be loaded for debugging (as is shown in
3253
    general description).
3326
    general description).
3254
 
3327
 
3255
======================================================================
3328
======================================================================
3256
= Fucntion 69, subfunction 6 - read from memory of debugged process. =
3329
= Fucntion 69, subfunction 6 - read from memory of debugged process. =
3257
======================================================================
3330
======================================================================
3258
Parameters:
3331
Parameters:
3259
  * eax = 69 - function number
3332
  * eax = 69 - function number
3260
  * ebx = 6 - subfunction number
3333
  * ebx = 6 - subfunction number
3261
  * ecx = identifier
3334
  * ecx = identifier
3262
  * edx = number of bytes to read
3335
  * edx = number of bytes to read
3263
  * esi = address in the memory of debugged process
3336
  * esi = address in the memory of debugged process
3264
  * edi = pointer to buffer for data
3337
  * edi = pointer to buffer for data
3265
Returned value:
3338
Returned value:
3266
  * eax = -1 at an error (invalid PID or buffer)
3339
  * eax = -1 at an error (invalid PID or buffer)
3267
  * otherwise eax = number of read bytes (possibly, 0,
3340
  * otherwise eax = number of read bytes (possibly, 0,
3268
    if esi is too large)
3341
    if esi is too large)
3269
Remarks:
3342
Remarks:
3270
  * Process must be loaded for debugging (as is shown in
3343
  * Process must be loaded for debugging (as is shown in
3271
    general description).
3344
    general description).
3272
 
3345
 
3273
======================================================================
3346
======================================================================
3274
== Function 69, subfunction 7 - write to memory of debugged process. =
3347
== Function 69, subfunction 7 - write to memory of debugged process. =
3275
======================================================================
3348
======================================================================
3276
Parameters:
3349
Parameters:
3277
  * eax = 69 - function number
3350
  * eax = 69 - function number
3278
  * ebx = 7 - subfunction number
3351
  * ebx = 7 - subfunction number
3279
  * ecx = identifier
3352
  * ecx = identifier
3280
  * edx = number of bytes to write
3353
  * edx = number of bytes to write
3281
  * esi = address of memory in debugged process
3354
  * esi = address of memory in debugged process
3282
  * edi = pointer to data
3355
  * edi = pointer to data
3283
Returned value:
3356
Returned value:
3284
  * eax = -1 at an error (invalid PID or buffer)
3357
  * eax = -1 at an error (invalid PID or buffer)
3285
  * otherwise eax = number of written bytes (possibly, 0,
3358
  * otherwise eax = number of written bytes (possibly, 0,
3286
    if esi is too large)
3359
    if esi is too large)
3287
Remarks:
3360
Remarks:
3288
  * Process must be loaded for debugging (as is shown in
3361
  * Process must be loaded for debugging (as is shown in
3289
    general description).
3362
    general description).
3290
 
3363
 
3291
======================================================================
3364
======================================================================
3292
======= Function 69, subfunction 8 - terminate debugged thread. ======
3365
======= Function 69, subfunction 8 - terminate debugged thread. ======
3293
======================================================================
3366
======================================================================
3294
Parameters:
3367
Parameters:
3295
  * eax = 69 - function number
3368
  * eax = 69 - function number
3296
  * ebx = 8 - subfunction number
3369
  * ebx = 8 - subfunction number
3297
  * ecx = identifier
3370
  * ecx = identifier
3298
Returned value:
3371
Returned value:
3299
  * function does not return value
3372
  * function does not return value
3300
Remarks:
3373
Remarks:
3301
  * Process must be loaded for debugging (as is shown in
3374
  * Process must be loaded for debugging (as is shown in
3302
    general description).
3375
    general description).
3303
  * The function is similar to subfunction 2 of function 18
3376
  * The function is similar to subfunction 2 of function 18
3304
    with two differences: it requires first remark and
3377
    with two differences: it requires first remark and
3305
    accepts PID rather than slot number.
3378
    accepts PID rather than slot number.
3306
 
3379
 
3307
======================================================================
3380
======================================================================
3308
===== Function 69, subfunction 9 - set/clear hardware breakpoint. ====
3381
===== Function 69, subfunction 9 - set/clear hardware breakpoint. ====
3309
======================================================================
3382
======================================================================
3310
Parameters:
3383
Parameters:
3311
  * eax = 69 - function number
3384
  * eax = 69 - function number
3312
  * ebx = 9 - subfunction number
3385
  * ebx = 9 - subfunction number
3313
  * ecx = thread identifier
3386
  * ecx = thread identifier
3314
  * dl = index of breakpoint, from 0 to 3 inclusively
3387
  * dl = index of breakpoint, from 0 to 3 inclusively
3315
  * dh = flags:
3388
  * dh = flags:
3316
    * if high bit is cleared - set breakpoint:
3389
    * if high bit is cleared - set breakpoint:
3317
      * bits 0-1 - condition:
3390
      * bits 0-1 - condition:
3318
        * 00 = breakpoint on execution
3391
        * 00 = breakpoint on execution
3319
        * 01 = breakpoint on read
3392
        * 01 = breakpoint on read
3320
        * 11 = breakpoint on read/write
3393
        * 11 = breakpoint on read/write
3321
      * bits 2-3 - length; for breakpoints on exception it must be
3394
      * bits 2-3 - length; for breakpoints on exception it must be
3322
        00, otherwise one of
3395
        00, otherwise one of
3323
        * 00 = byte
3396
        * 00 = byte
3324
        * 01 = word
3397
        * 01 = word
3325
        * 11 = dword
3398
        * 11 = dword
3326
      * esi = breakpoint address; must be aligned according to
3399
      * esi = breakpoint address; must be aligned according to
3327
        the length (i.e. must be even for word breakpoints,
3400
        the length (i.e. must be even for word breakpoints,
3328
        divisible by 4 for dword)
3401
        divisible by 4 for dword)
3329
    * if high bit is set - clear breakpoint
3402
    * if high bit is set - clear breakpoint
3330
Returned value:
3403
Returned value:
3331
  * eax = 0 - success
3404
  * eax = 0 - success
3332
  * eax = 1 - error in the input data
3405
  * eax = 1 - error in the input data
3333
  * eax = 2 - (reserved, is never returned in the current
3406
  * eax = 2 - (reserved, is never returned in the current
3334
    implementation) a global breakpoint with that index is already set
3407
    implementation) a global breakpoint with that index is already set
3335
Remarks:
3408
Remarks:
3336
  * Process must be loaded for debugging (as is shown in
3409
  * Process must be loaded for debugging (as is shown in
3337
    general description).
3410
    general description).
3338
  * Hardware breakpoints are implemented through DRx-registers of
3411
  * Hardware breakpoints are implemented through DRx-registers of
3339
    the processor, all limitations results from this.
3412
    the processor, all limitations results from this.
3340
  * The function can reinstall the breakpoint, previously set
3413
  * The function can reinstall the breakpoint, previously set
3341
    by it (and it does not inform on this).
3414
    by it (and it does not inform on this).
3342
    Carry on the list of set breakpoints in the debugger.
3415
    Carry on the list of set breakpoints in the debugger.
3343
  * Breakpoints generate debug exception #DB, on which the system
3416
  * Breakpoints generate debug exception #DB, on which the system
3344
    notifies debugger.
3417
    notifies debugger.
3345
  * Breakpoints on write and read/write act after
3418
  * Breakpoints on write and read/write act after
3346
    execution of the caused it instruction.
3419
    execution of the caused it instruction.
3347
 
3420
 
3348
======================================================================
3421
======================================================================
3349
==== Function 70 - work with file system with long names support. ====
3422
==== Function 70 - work with file system with long names support. ====
3350
======================================================================
3423
======================================================================
3351
Parameters:
3424
Parameters:
3352
  * eax = 70
3425
  * eax = 70
3353
  * ebx = pointer to the information structure
3426
  * ebx = pointer to the information structure
3354
Returned value:
3427
Returned value:
3355
  * eax = 0 - success; otherwise file system error code
3428
  * eax = 0 - success; otherwise file system error code
3356
  * some subfunctions return value in other registers too
3429
  * some subfunctions return value in other registers too
3357
General format of the information structure:
3430
General format of the information structure:
3358
  * +0: dword: subfunction number
3431
  * +0: dword: subfunction number
3359
  * +4: dword: file offset
3432
  * +4: dword: file offset
3360
  * +8: dword: high dword of offset (must be 0) or flags field
3433
  * +8: dword: high dword of offset (must be 0) or flags field
3361
  * +12 = +0xC: dword: size
3434
  * +12 = +0xC: dword: size
3362
  * +16 = +0x10: dword: pointer to data
3435
  * +16 = +0x10: dword: pointer to data
3363
  * +20 = +0x14: n db: ASCIIZ-string with the filename
3436
  * +20 = +0x14: n db: ASCIIZ-string with the filename
3364
    or
3437
    or
3365
  * +20 = +0x14: db 0
3438
  * +20 = +0x14: db 0
3366
  * +21 = +0x15: dd pointer to ASCIIZ-string with the filename
3439
  * +21 = +0x15: dd pointer to ASCIIZ-string with the filename
3367
Specifications - in documentation on the appropriate subfunction.
3440
Specifications - in documentation on the appropriate subfunction.
3368
Filename is case-insensitive. Russian letters must be written in
3441
Filename is case-insensitive. Russian letters must be written in
3369
the encoding cp866 (DOS).
3442
the encoding cp866 (DOS).
3370
Format of filename:
3443
Format of filename:
3371
/base/number/dir1/dir2/.../dirn/file,
3444
/base/number/dir1/dir2/.../dirn/file,
3372
where /base/number identifies device, on which file is located:
3445
where /base/number identifies device, on which file is located:
3373
one of
3446
one of
3374
  * /RD/1 = /RAMDISK/1 to access ramdisk
3447
  * /RD/1 = /RAMDISK/1 to access ramdisk
3375
  * /FD/1 = /FLOPPYDISK/1 to access first floppy drive,
3448
  * /FD/1 = /FLOPPYDISK/1 to access first floppy drive,
3376
    /FD/2 = /FLOPPYDISK/2 to access second one
3449
    /FD/2 = /FLOPPYDISK/2 to access second one
3377
  * /HD0/x, /HD1/x, /HD2/x, /HD3/x to access accordingly to devices
3450
  * /HD0/x, /HD1/x, /HD2/x, /HD3/x to access accordingly to devices
3378
    IDE0 (Primary Master), IDE1 (Primary Slave),
3451
    IDE0 (Primary Master), IDE1 (Primary Slave),
3379
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
3452
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
3380
    x - partition number on the selected hard drive, varies from 1
3453
    x - partition number on the selected hard drive, varies from 1
3381
    to 255 (on each hard drive the indexing starts from 1)
3454
    to 255 (on each hard drive the indexing starts from 1)
3382
  * /CD0/1, /CD1/1, /CD2/1, /CD3/1 to access accordingly to
3455
  * /CD0/1, /CD1/1, /CD2/1, /CD3/1 to access accordingly to
3383
    CD on IDE0 (Primary Master), IDE1 (Primary Slave),
3456
    CD on IDE0 (Primary Master), IDE1 (Primary Slave),
3384
    IDE2 (Secondary Master), IDE3 (Secondary Slave)
3457
    IDE2 (Secondary Master), IDE3 (Secondary Slave)
3385
  * /SYS means system folder; with the usual boot (from floppy)
3458
  * /SYS means system folder; with the usual boot (from floppy)
3386
    is equivalent to /RD/1
3459
    is equivalent to /RD/1
3387
Examples:
3460
Examples:
3388
  * '/rd/1/kernel.asm',0
3461
  * '/rd/1/kernel.asm',0
3389
  * '/HD0/1/kernel.asm',0
3462
  * '/HD0/1/kernel.asm',0
3390
  * '/hd0/2/menuet/pics/tanzania.bmp',0
3463
  * '/hd0/2/menuet/pics/tanzania.bmp',0
3391
  * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
3464
  * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
3392
  * '/sys/MySuperApp.ini',0
3465
  * '/sys/MySuperApp.ini',0
3393
Also function supports relative names.  If the path begins not
3466
Also function supports relative names.  If the path begins not
3394
with '/', it is considered relative to a current folder. To get or
3467
with '/', it is considered relative to a current folder. To get or
3395
set a current folder, use the function 30.
3468
set a current folder, use the function 30.
3396
 
3469
 
3397
Available subfunctions:
3470
Available subfunctions:
3398
  * subfunction 0 - read file
3471
  * subfunction 0 - read file
3399
  * subfunction 1 - read folder
3472
  * subfunction 1 - read folder
3400
  * subfunction 2 - create/rewrite file
3473
  * subfunction 2 - create/rewrite file
3401
  * subfunction 3 - write to existing file
3474
  * subfunction 3 - write to existing file
3402
  * subfunction 4 - set file size
3475
  * subfunction 4 - set file size
3403
  * subfunction 5 - get attributes of file/folder
3476
  * subfunction 5 - get attributes of file/folder
3404
  * subfunction 6 - set attributes of file/folder
3477
  * subfunction 6 - set attributes of file/folder
3405
  * subfunction 7 - start application
3478
  * subfunction 7 - start application
3406
  * subfunction 8 - delete file/folder
3479
  * subfunction 8 - delete file/folder
3407
  * subfunction 9 - create folder
3480
  * subfunction 9 - create folder
3408
For CD-drives due to hardware limitations only subfunctions
3481
For CD-drives due to hardware limitations only subfunctions
3409
0,1,5 and 7 are available, other subfunctions return error
3482
0,1,5 and 7 are available, other subfunctions return error
3410
with code 2.
3483
with code 2.
3411
At the first call of subfunctions 0,1,5,7 to ATAPI devices
3484
At the first call of subfunctions 0,1,5,7 to ATAPI devices
3412
(CD and DVD) the manual control of tray is locked due to caching
3485
(CD and DVD) the manual control of tray is locked due to caching
3413
drive data. Unlocking is made when subfunction 4 of function 24
3486
drive data. Unlocking is made when subfunction 4 of function 24
3414
is called for corresponding device.
3487
is called for corresponding device.
3415
 
3488
 
3416
======================================================================
3489
======================================================================
3417
=== Function 70, subfunction 0 - read file with long names support. ==
3490
=== Function 70, subfunction 0 - read file with long names support. ==
3418
======================================================================
3491
======================================================================
3419
Parameters:
3492
Parameters:
3420
  * eax = 70 - function number
3493
  * eax = 70 - function number
3421
  * ebx = pointer to the information structure
3494
  * ebx = pointer to the information structure
3422
Format of the information structure:
3495
Format of the information structure:
3423
  * +0: dword: 0 = subfunction number
3496
  * +0: dword: 0 = subfunction number
3424
  * +4: dword: file offset (in bytes)
3497
  * +4: dword: file offset (in bytes)
3425
  * +8: dword: 0 (reserved for high dword of offset)
3498
  * +8: dword: 0 (reserved for high dword of offset)
3426
  * +12 = +0xC: dword: number of bytes to read
3499
  * +12 = +0xC: dword: number of bytes to read
3427
  * +16 = +0x10: dword: pointer to buffer for data
3500
  * +16 = +0x10: dword: pointer to buffer for data
3428
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3501
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3429
    given in the general description
3502
    given in the general description
3430
    or
3503
    or
3431
  * +20 = +0x14: db 0
3504
  * +20 = +0x14: db 0
3432
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3505
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3433
Returned value:
3506
Returned value:
3434
  * eax = 0 - success, otherwise file system error code
3507
  * eax = 0 - success, otherwise file system error code
3435
  * ebx = number of read bytes or -1=0xffffffff if file was not found
3508
  * ebx = number of read bytes or -1=0xffffffff if file was not found
3436
Remarks:
3509
Remarks:
3437
  * If file was ended before last requested block was read,
3510
  * If file was ended before last requested block was read,
3438
    the function will read as many as it can, and after that return
3511
    the function will read as many as it can, and after that return
3439
    eax=6 (EOF).
3512
    eax=6 (EOF).
3440
  * The function does not allow to read folder (returns eax=10,
3513
  * The function does not allow to read folder (returns eax=10,
3441
    access denied).
3514
    access denied).
3442
 
3515
 
3443
======================================================================
3516
======================================================================
3444
== Function 70, subfunction 1 - read folder with long names support. =
3517
== Function 70, subfunction 1 - read folder with long names support. =
3445
======================================================================
3518
======================================================================
3446
Parameters:
3519
Parameters:
3447
  * eax = 70 - function number
3520
  * eax = 70 - function number
3448
  * ebx = pointer to the information structure
3521
  * ebx = pointer to the information structure
3449
Format of the information structure:
3522
Format of the information structure:
3450
  * +0: dword: 1 = subfunction number
3523
  * +0: dword: 1 = subfunction number
3451
  * +4: dword: index of starting block (beginning from 0)
3524
  * +4: dword: index of starting block (beginning from 0)
3452
  * +8: dword: flags field:
3525
  * +8: dword: flags field:
3453
    * bit 0 (mask 1): in what format to return names,
3526
    * bit 0 (mask 1): in what format to return names,
3454
      0=ANSI, 1=UNICODE
3527
      0=ANSI, 1=UNICODE
3455
    * other bits are reserved and must be set to 0 for the future
3528
    * other bits are reserved and must be set to 0 for the future
3456
      compatibility
3529
      compatibility
3457
  * +12 = +0xC: dword: number of blocks to read
3530
  * +12 = +0xC: dword: number of blocks to read
3458
  * +16 = +0x10: dword: pointer to buffer for data, buffer size
3531
  * +16 = +0x10: dword: pointer to buffer for data, buffer size
3459
    must be not less than 32 + [+12]*560 bytes
3532
    must be not less than 32 + [+12]*560 bytes
3460
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
3533
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
3461
    given in the general description
3534
    given in the general description
3462
    or
3535
    or
3463
  * +20 = +0x14: db 0
3536
  * +20 = +0x14: db 0
3464
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3537
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3465
Returned value:
3538
Returned value:
3466
  * eax = 0 - success, otherwise file system error code
3539
  * eax = 0 - success, otherwise file system error code
3467
  * ebx = number of files, information on which was written to
3540
  * ebx = number of files, information on which was written to
3468
    the buffer, or -1=0xffffffff, if folder was not found
3541
    the buffer, or -1=0xffffffff, if folder was not found
3469
Structure of the buffer:
3542
Structure of the buffer:
3470
  * +0: 32*byte: header
3543
  * +0: 32*byte: header
3471
  * +32 = +0x20: n1*byte: block with information on file 1
3544
  * +32 = +0x20: n1*byte: block with information on file 1
3472
  * +32+n1: n2*byte: block with information on file 2
3545
  * +32+n1: n2*byte: block with information on file 2
3473
  * ...
3546
  * ...
3474
Structure of header:
3547
Structure of header:
3475
  * +0: dword: version of structure (current is 1)
3548
  * +0: dword: version of structure (current is 1)
3476
  * +4: dword: number of placed blocks; is not greater than requested
3549
  * +4: dword: number of placed blocks; is not greater than requested
3477
    in the field +12 of information structure; can be less, if
3550
    in the field +12 of information structure; can be less, if
3478
    there are no more files in folder (the same as in ebx)
3551
    there are no more files in folder (the same as in ebx)
3479
  * +8: dword: total number of files in folder
3552
  * +8: dword: total number of files in folder
3480
  * +12 = +0xC: 20*byte: reserved (zeroed)
3553
  * +12 = +0xC: 20*byte: reserved (zeroed)
3481
Structure of block of data for folder entry (BDFE):
3554
Structure of block of data for folder entry (BDFE):
3482
  * +0: dword: attributes of file:
3555
  * +0: dword: attributes of file:
3483
    * bit 0 (mask 1): file is read-only
3556
    * bit 0 (mask 1): file is read-only
3484
    * bit 1 (mask 2): file is hidden
3557
    * bit 1 (mask 2): file is hidden
3485
    * bit 2 (mask 4): file is system
3558
    * bit 2 (mask 4): file is system
3486
    * bit 3 (mask 8): this is not a file but volume label
3559
    * bit 3 (mask 8): this is not a file but volume label
3487
      (for one partition meets no more than once and
3560
      (for one partition meets no more than once and
3488
      only in root folder)
3561
      only in root folder)
3489
    * bit 4 (mask 0x10): this is a folder
3562
    * bit 4 (mask 0x10): this is a folder
3490
    * bit 5 (mask 0x20): file was not archived - many archivation
3563
    * bit 5 (mask 0x20): file was not archived - many archivation
3491
      programs have an option to archive only files with this bit set,
3564
      programs have an option to archive only files with this bit set,
3492
      and after archiving this bit is cleared - it can be useful
3565
      and after archiving this bit is cleared - it can be useful
3493
      for automatically creating of backup-archives as at writing
3566
      for automatically creating of backup-archives as at writing
3494
      this bit is usually set
3567
      this bit is usually set
3495
  * +4: byte: type of name data:
3568
  * +4: byte: type of name data:
3496
    (coincides with bit 0 of flags in the information structure)
3569
    (coincides with bit 0 of flags in the information structure)
3497
    * 0 = ASCII = 1-byte representation of each character
3570
    * 0 = ASCII = 1-byte representation of each character
3498
    * 1 = UNICODE = 2-byte representation of each character
3571
    * 1 = UNICODE = 2-byte representation of each character
3499
  * +5: 3*byte: reserved (zero)
3572
  * +5: 3*byte: reserved (zero)
3500
  * +8: 4*byte: time of file creation
3573
  * +8: 4*byte: time of file creation
3501
  * +12 = +0xC: 4*byte: date of file creation
3574
  * +12 = +0xC: 4*byte: date of file creation
3502
  * +16 = +0x10: 4*byte: time of last access (read or write)
3575
  * +16 = +0x10: 4*byte: time of last access (read or write)
3503
  * +20 = +0x14: 4*byte: date of last access
3576
  * +20 = +0x14: 4*byte: date of last access
3504
  * +24 = +0x18: 4*byte: time of last modification
3577
  * +24 = +0x18: 4*byte: time of last modification
3505
  * +28 = +0x1C: 4*byte: date of last modification
3578
  * +28 = +0x1C: 4*byte: date of last modification
3506
  * +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
3579
  * +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
3507
  * +40 = +0x28: name
3580
  * +40 = +0x28: name
3508
    * for ASCII format: maximum length is 263 characters
3581
    * for ASCII format: maximum length is 263 characters
3509
      (263 bytes), byte after the name has value 0
3582
      (263 bytes), byte after the name has value 0
3510
    * for UNICODE format: maximum length is 259 characters
3583
    * for UNICODE format: maximum length is 259 characters
3511
      (518 bytes), 2 bytes after the name have value 0
3584
      (518 bytes), 2 bytes after the name have value 0
3512
Time format:
3585
Time format:
3513
  * +0: byte: seconds
3586
  * +0: byte: seconds
3514
  * +1: byte: minutes
3587
  * +1: byte: minutes
3515
  * +2: byte: hours
3588
  * +2: byte: hours
3516
  * +3: byte: reserved (0)
3589
  * +3: byte: reserved (0)
3517
  * for example, 23.59.59 is written as (in hex) 3B 3B 17 00
3590
  * for example, 23.59.59 is written as (in hex) 3B 3B 17 00
3518
Date format:
3591
Date format:
3519
  * +0: byte: day
3592
  * +0: byte: day
3520
  * +1: byte: month
3593
  * +1: byte: month
3521
  * +2: word: year
3594
  * +2: word: year
3522
  * for example, 25.11.1979 is written as (in hex) 19 0B BB 07
3595
  * for example, 25.11.1979 is written as (in hex) 19 0B BB 07
3523
Remarks:
3596
Remarks:
3524
  * If BDFE contains ASCII name, the length of BDFE is 304 bytes,
3597
  * If BDFE contains ASCII name, the length of BDFE is 304 bytes,
3525
    if UNICODE name - 560 bytes. Value of length is aligned
3598
    if UNICODE name - 560 bytes. Value of length is aligned
3526
    on 16-byte bound (to accelerate processing in CPU cache).
3599
    on 16-byte bound (to accelerate processing in CPU cache).
3527
  * First character after a name is zero (ASCIIZ-string). The further
3600
  * First character after a name is zero (ASCIIZ-string). The further
3528
    data contain garbage.
3601
    data contain garbage.
3529
  * If files in folder were ended before requested number was read,
3602
  * If files in folder were ended before requested number was read,
3530
    the function will read as many as it can, and after that return
3603
    the function will read as many as it can, and after that return
3531
    eax=6 (EOF).
3604
    eax=6 (EOF).
3532
  * Any folder on the disk, except for root, contains two special
3605
  * Any folder on the disk, except for root, contains two special
3533
    entries "." and "..", identifying accordingly the folder itself
3606
    entries "." and "..", identifying accordingly the folder itself
3534
    and the parent folder.
3607
    and the parent folder.
3535
  * The function allows also to read virtual folders "/", "/rd",
3608
  * The function allows also to read virtual folders "/", "/rd",
3536
    "/fd", "/hd[n]", thus attributes of subfolders are set to 0x10,
3609
    "/fd", "/hd[n]", thus attributes of subfolders are set to 0x10,
3537
    and times and dates are zeroed. An alternative way to get the
3610
    and times and dates are zeroed. An alternative way to get the
3538
    equipment information - subfunction 11 of function 18.
3611
    equipment information - subfunction 11 of function 18.
3539
 
3612
 
3540
======================================================================
3613
======================================================================
3541
===================== Function 70, subfunction 2 =====================
3614
===================== Function 70, subfunction 2 =====================
3542
============ Create/rewrite file with long names support. ============
3615
============ Create/rewrite file with long names support. ============
3543
======================================================================
3616
======================================================================
3544
Parameters:
3617
Parameters:
3545
  * eax = 70 - function number
3618
  * eax = 70 - function number
3546
  * ebx = pointer to the information structure
3619
  * ebx = pointer to the information structure
3547
Format of the information structure:
3620
Format of the information structure:
3548
  * +0: dword: 2 = subfunction number
3621
  * +0: dword: 2 = subfunction number
3549
  * +4: dword: 0 (reserved)
3622
  * +4: dword: 0 (reserved)
3550
  * +8: dword: 0 (reserved)
3623
  * +8: dword: 0 (reserved)
3551
  * +12 = +0xC: dword: number of bytes to write
3624
  * +12 = +0xC: dword: number of bytes to write
3552
  * +16 = +0x10: dword: pointer to data
3625
  * +16 = +0x10: dword: pointer to data
3553
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3626
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3554
    given in the general description
3627
    given in the general description
3555
    or
3628
    or
3556
  * +20 = +0x14: db 0
3629
  * +20 = +0x14: db 0
3557
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3630
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3558
Returned value:
3631
Returned value:
3559
  * eax = 0 - success, otherwise file system error code
3632
  * eax = 0 - success, otherwise file system error code
3560
  * ebx = number of written bytes (possibly 0)
3633
  * ebx = number of written bytes (possibly 0)
3561
Remarks:
3634
Remarks:
3562
  * If a file with given name did not exist, it is created;
3635
  * If a file with given name did not exist, it is created;
3563
    if it existed, it is rewritten.
3636
    if it existed, it is rewritten.
3564
  * If there is not enough free space on disk, the function will
3637
  * If there is not enough free space on disk, the function will
3565
    write as many as can and then return error code 8.
3638
    write as many as can and then return error code 8.
3566
  * The function is not supported for CD (returns error code 2).
3639
  * The function is not supported for CD (returns error code 2).
3567
 
3640
 
3568
======================================================================
3641
======================================================================
3569
===================== Function 70, subfunction 3 =====================
3642
===================== Function 70, subfunction 3 =====================
3570
=========== Write to existing file with long names support. ==========
3643
=========== Write to existing file with long names support. ==========
3571
======================================================================
3644
======================================================================
3572
Parameters:
3645
Parameters:
3573
  * eax = 70 - function number
3646
  * eax = 70 - function number
3574
  * ebx = pointer to the information structure
3647
  * ebx = pointer to the information structure
3575
Format of the information structure:
3648
Format of the information structure:
3576
  * +0: dword: 3 = subfunction number
3649
  * +0: dword: 3 = subfunction number
3577
  * +4: dword: file offset (in bytes)
3650
  * +4: dword: file offset (in bytes)
3578
  * +8: dword: high dword of offset (must be 0 for FAT)
3651
  * +8: dword: high dword of offset (must be 0 for FAT)
3579
  * +12 = +0xC: dword: number of bytes to write
3652
  * +12 = +0xC: dword: number of bytes to write
3580
  * +16 = +0x10: dword: pointer to data
3653
  * +16 = +0x10: dword: pointer to data
3581
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3654
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3582
    given in the general description
3655
    given in the general description
3583
    or
3656
    or
3584
  * +20 = +0x14: db 0
3657
  * +20 = +0x14: db 0
3585
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3658
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3586
Returned value:
3659
Returned value:
3587
  * eax = 0 - success, otherwise file system error code
3660
  * eax = 0 - success, otherwise file system error code
3588
  * ebx = number of written bytes (possibly 0)
3661
  * ebx = number of written bytes (possibly 0)
3589
Remarks:
3662
Remarks:
3590
  * The file must already exist, otherwise function returns eax=5.
3663
  * The file must already exist, otherwise function returns eax=5.
3591
  * The only result of write 0 bytes is update in the file attributes
3664
  * The only result of write 0 bytes is update in the file attributes
3592
    date/time of modification and access to the current date/time.
3665
    date/time of modification and access to the current date/time.
3593
  * If beginning and/or ending position is greater than file size
3666
  * If beginning and/or ending position is greater than file size
3594
    (except for the previous case), the file is expanded to needed
3667
    (except for the previous case), the file is expanded to needed
3595
    size with zero characters.
3668
    size with zero characters.
3596
  * The function is not supported for CD (returns error code 2).
3669
  * The function is not supported for CD (returns error code 2).
3597
 
3670
 
3598
======================================================================
3671
======================================================================
3599
============ Function 70, subfunction 4 - set end of file. ===========
3672
============ Function 70, subfunction 4 - set end of file. ===========
3600
======================================================================
3673
======================================================================
3601
Parameters:
3674
Parameters:
3602
  * eax = 70 - function number
3675
  * eax = 70 - function number
3603
  * ebx = pointer to the information structure
3676
  * ebx = pointer to the information structure
3604
Format of the information structure:
3677
Format of the information structure:
3605
  * +0: dword: 4 = subfunction number
3678
  * +0: dword: 4 = subfunction number
3606
  * +4: dword: low dword of new file size
3679
  * +4: dword: low dword of new file size
3607
  * +8: dword: high dword of new file size (must be 0 for FAT)
3680
  * +8: dword: high dword of new file size (must be 0 for FAT)
3608
  * +12 = +0xC: dword: 0 (reserved)
3681
  * +12 = +0xC: dword: 0 (reserved)
3609
  * +16 = +0x10: dword: 0 (reserved)
3682
  * +16 = +0x10: dword: 0 (reserved)
3610
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3683
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3611
    given in the general description
3684
    given in the general description
3612
    or
3685
    or
3613
  * +20 = +0x14: db 0
3686
  * +20 = +0x14: db 0
3614
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3687
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3615
Returned value:
3688
Returned value:
3616
  * eax = 0 - success, otherwise file system error code
3689
  * eax = 0 - success, otherwise file system error code
3617
  * ebx destroyed
3690
  * ebx destroyed
3618
Remarks:
3691
Remarks:
3619
  * If the new file size is less than old one, file is truncated.
3692
  * If the new file size is less than old one, file is truncated.
3620
    If the new size is greater than old one, file is expanded with
3693
    If the new size is greater than old one, file is expanded with
3621
    characters with code 0. If the new size is equal to old one,
3694
    characters with code 0. If the new size is equal to old one,
3622
    the only result of call is set date/time of modification and
3695
    the only result of call is set date/time of modification and
3623
    access to the current date/time.
3696
    access to the current date/time.
3624
  * If there is not enough free space on disk for expansion, the
3697
  * If there is not enough free space on disk for expansion, the
3625
    function will expand to maximum possible size and then return
3698
    function will expand to maximum possible size and then return
3626
    error code 8.
3699
    error code 8.
3627
  * The function is not supported for CD (returns error code 2).
3700
  * The function is not supported for CD (returns error code 2).
3628
 
3701
 
3629
======================================================================
3702
======================================================================
3630
==== Function 70, subfunction 5 - get information on file/folder. ====
3703
==== Function 70, subfunction 5 - get information on file/folder. ====
3631
======================================================================
3704
======================================================================
3632
Parameters:
3705
Parameters:
3633
  * eax = 70 - function number
3706
  * eax = 70 - function number
3634
  * ebx = pointer to the information structure
3707
  * ebx = pointer to the information structure
3635
Format of the information structure:
3708
Format of the information structure:
3636
  * +0: dword: 5 = subfunction number
3709
  * +0: dword: 5 = subfunction number
3637
  * +4: dword: 0 (reserved)
3710
  * +4: dword: 0 (reserved)
3638
  * +8: dword: 0 (reserved)
3711
  * +8: dword: 0 (reserved)
3639
  * +12 = +0xC: dword: 0 (reserved)
3712
  * +12 = +0xC: dword: 0 (reserved)
3640
  * +16 = +0x10: dword: pointer to buffer for data (40 bytes)
3713
  * +16 = +0x10: dword: pointer to buffer for data (40 bytes)
3641
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3714
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3642
    given in the general description
3715
    given in the general description
3643
    or
3716
    or
3644
  * +20 = +0x14: db 0
3717
  * +20 = +0x14: db 0
3645
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3718
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3646
Returned value:
3719
Returned value:
3647
  * eax = 0 - success, otherwise file system error code
3720
  * eax = 0 - success, otherwise file system error code
3648
  * ebx destroyed
3721
  * ebx destroyed
3649
Information on file is returned in the BDFE format (block of data
3722
Information on file is returned in the BDFE format (block of data
3650
for folder entry), explained in the description of
3723
for folder entry), explained in the description of
3651
subfunction 1, but without filename
3724
subfunction 1, but without filename
3652
(i.e. only first 40 = 0x28 bytes).
3725
(i.e. only first 40 = 0x28 bytes).
3653
Remarks:
3726
Remarks:
3654
  * The function does not support virtual folders such as /, /rd and
3727
  * The function does not support virtual folders such as /, /rd and
3655
    root folders like /rd/1.
3728
    root folders like /rd/1.
3656
 
3729
 
3657
======================================================================
3730
======================================================================
3658
===== Function 70, subfunction 6 - set attributes of file/folder. ====
3731
===== Function 70, subfunction 6 - set attributes of file/folder. ====
3659
======================================================================
3732
======================================================================
3660
Parameters:
3733
Parameters:
3661
  * eax = 70 - function number
3734
  * eax = 70 - function number
3662
  * ebx = pointer to the information structure
3735
  * ebx = pointer to the information structure
3663
Format of the information structure:
3736
Format of the information structure:
3664
  * +0: dword: 6 = subfunction number
3737
  * +0: dword: 6 = subfunction number
3665
  * +4: dword: 0 (reserved)
3738
  * +4: dword: 0 (reserved)
3666
  * +8: dword: 0 (reserved)
3739
  * +8: dword: 0 (reserved)
3667
  * +12 = +0xC: dword: 0 (reserved)
3740
  * +12 = +0xC: dword: 0 (reserved)
3668
  * +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
3741
  * +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
3669
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3742
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3670
    given in the general description
3743
    given in the general description
3671
    or
3744
    or
3672
  * +20 = +0x14: db 0
3745
  * +20 = +0x14: db 0
3673
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3746
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3674
Returned value:
3747
Returned value:
3675
  * eax = 0 - success, otherwise file system error code
3748
  * eax = 0 - success, otherwise file system error code
3676
  * ebx destroyed
3749
  * ebx destroyed
3677
File attributes are first 32 bytes in BDFE (block of data
3750
File attributes are first 32 bytes in BDFE (block of data
3678
for folder entry), explained in the description of subfunction 1
3751
for folder entry), explained in the description of subfunction 1
3679
(that is, without name and size of file). Attribute
3752
(that is, without name and size of file). Attribute
3680
file/folder/volume label (bits 3,4 in dword +0) is not changed.
3753
file/folder/volume label (bits 3,4 in dword +0) is not changed.
3681
Byte +4 (name format) is ignored.
3754
Byte +4 (name format) is ignored.
3682
Remarks:
3755
Remarks:
3683
  * The function does not support virtual folders such as /, /rd and
3756
  * The function does not support virtual folders such as /, /rd and
3684
    root folders like /rd/1.
3757
    root folders like /rd/1.
3685
  * The function is not supported for CD (returns error code 2).
3758
  * The function is not supported for CD (returns error code 2).
3686
 
3759
 
3687
======================================================================
3760
======================================================================
3688
=========== Function 70, subfunction 7 - start application. ==========
3761
=========== Function 70, subfunction 7 - start application. ==========
3689
======================================================================
3762
======================================================================
3690
Parameters:
3763
Parameters:
3691
  * eax = 70 - function number
3764
  * eax = 70 - function number
3692
  * ebx = pointer to the information structure
3765
  * ebx = pointer to the information structure
3693
Format of the information structure:
3766
Format of the information structure:
3694
  * +0: dword: 7 = subfunction number
3767
  * +0: dword: 7 = subfunction number
3695
  * +4: dword: flags field:
3768
  * +4: dword: flags field:
3696
    * bit 0: start process as debugged
3769
    * bit 0: start process as debugged
3697
    * other bits are reserved and must be set to 0
3770
    * other bits are reserved and must be set to 0
3698
  * +8: dword: 0 or pointer to ASCIIZ-string with parameters
3771
  * +8: dword: 0 or pointer to ASCIIZ-string with parameters
3699
  * +12 = +0xC: dword: 0 (reserved)
3772
  * +12 = +0xC: dword: 0 (reserved)
3700
  * +16 = +0x10: dword: 0 (reserved)
3773
  * +16 = +0x10: dword: 0 (reserved)
3701
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3774
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3702
    given in the general description
3775
    given in the general description
3703
    or
3776
    or
3704
  * +20 = +0x14: db 0
3777
  * +20 = +0x14: db 0
3705
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3778
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3706
Returned value:
3779
Returned value:
3707
  * eax > 0 - program is loaded, eax contains PID
3780
  * eax > 0 - program is loaded, eax contains PID
3708
  * eax < 0 - an error has occured, -eax contains
3781
  * eax < 0 - an error has occured, -eax contains
3709
    file system error code
3782
    file system error code
3710
  * ebx destroyed
3783
  * ebx destroyed
3711
Remarks:
3784
Remarks:
3712
  * Command line must be terminated by the character with the code 0
3785
  * Command line must be terminated by the character with the code 0
3713
    (ASCIIZ-string); function takes into account either all characters
3786
    (ASCIIZ-string); function takes into account either all characters
3714
    up to terminating zero inclusively or first 256 character
3787
    up to terminating zero inclusively or first 256 character
3715
    regarding what is less.
3788
    regarding what is less.
3716
  * If the process is started as debugged, it is created in
3789
  * If the process is started as debugged, it is created in
3717
    the suspended state; to run use subfunction 5 of function 69.
3790
    the suspended state; to run use subfunction 5 of function 69.
3718
 
3791
 
3719
======================================================================
3792
======================================================================
3720
========== Function 70, subfunction 8 - delete file/folder. ==========
3793
========== Function 70, subfunction 8 - delete file/folder. ==========
3721
======================================================================
3794
======================================================================
3722
Parameters:
3795
Parameters:
3723
  * eax = 70 - function number
3796
  * eax = 70 - function number
3724
  * ebx = pointer to the information structure
3797
  * ebx = pointer to the information structure
3725
Format of the information structure:
3798
Format of the information structure:
3726
  * +0: dword: 8 = subfunction number
3799
  * +0: dword: 8 = subfunction number
3727
  * +4: dword: 0 (reserved)
3800
  * +4: dword: 0 (reserved)
3728
  * +8: dword: 0 (reserved)
3801
  * +8: dword: 0 (reserved)
3729
  * +12 = +0xC: dword: 0 (reserved)
3802
  * +12 = +0xC: dword: 0 (reserved)
3730
  * +16 = +0x10: dword: 0 (reserved)
3803
  * +16 = +0x10: dword: 0 (reserved)
3731
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3804
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3732
    given in the general description
3805
    given in the general description
3733
    or
3806
    or
3734
  * +20 = +0x14: db 0
3807
  * +20 = +0x14: db 0
3735
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3808
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3736
Returned value:
3809
Returned value:
3737
  * eax = 0 - success, otherwise file system error code
3810
  * eax = 0 - success, otherwise file system error code
3738
  * ebx destroyed
3811
  * ebx destroyed
3739
Remarks:
3812
Remarks:
3740
  * The function is not supported for CD (returns error code 2).
3813
  * The function is not supported for CD (returns error code 2).
3741
  * The function can delete only empty folders (attempt to delete
3814
  * The function can delete only empty folders (attempt to delete
3742
    nonempty folder results in error with code 10, "access denied").
3815
    nonempty folder results in error with code 10, "access denied").
3743
 
3816
 
3744
======================================================================
3817
======================================================================
3745
============= Function 70, subfunction 9 - create folder. ============
3818
============= Function 70, subfunction 9 - create folder. ============
3746
======================================================================
3819
======================================================================
3747
Parameters:
3820
Parameters:
3748
  * eax = 70 - function number
3821
  * eax = 70 - function number
3749
  * ebx = pointer to the information structure
3822
  * ebx = pointer to the information structure
3750
Format of the information structure:
3823
Format of the information structure:
3751
  * +0: dword: 9 = subfunction number
3824
  * +0: dword: 9 = subfunction number
3752
  * +4: dword: 0 (reserved)
3825
  * +4: dword: 0 (reserved)
3753
  * +8: dword: 0 (reserved)
3826
  * +8: dword: 0 (reserved)
3754
  * +12 = +0xC: dword: 0 (reserved)
3827
  * +12 = +0xC: dword: 0 (reserved)
3755
  * +16 = +0x10: dword: 0 (reserved)
3828
  * +16 = +0x10: dword: 0 (reserved)
3756
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
3829
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
3757
    given in the general description
3830
    given in the general description
3758
    or
3831
    or
3759
  * +20 = +0x14: db 0
3832
  * +20 = +0x14: db 0
3760
  * +21 = +0x15: dd pointer to ASCIIZ-string with folder name
3833
  * +21 = +0x15: dd pointer to ASCIIZ-string with folder name
3761
Returned value:
3834
Returned value:
3762
  * eax = 0 - success, otherwise file system error code
3835
  * eax = 0 - success, otherwise file system error code
3763
  * ebx destroyed
3836
  * ebx destroyed
3764
Remarks:
3837
Remarks:
3765
  * The function is not supported for CD (returns error code 2).
3838
  * The function is not supported for CD (returns error code 2).
3766
  * The parent folder must already exist.
3839
  * The parent folder must already exist.
3767
  * If target folder already exists, function returns success (eax=0).
3840
  * If target folder already exists, function returns success (eax=0).
3768
 
3841
 
3769
======================================================================
3842
======================================================================
3770
========== Function 71, subfunction 1 - set window caption. ==========
3843
========== Function 71, subfunction 1 - set window caption. ==========
3771
======================================================================
3844
======================================================================
3772
Parameters:
3845
Parameters:
3773
  * eax = 71 - function number
3846
  * eax = 71 - function number
3774
  * ebx = 1 - subfunction number
3847
  * ebx = 1 - subfunction number
3775
  * ecx = pointer to caption string
3848
  * ecx = pointer to zero terminated string
3776
Returned value:
3849
Returned value:
3777
  * function does not return value
3850
  * function does not return value
3778
Remarks:
3851
Remarks:
3779
  * String must be in the ASCIIZ-format. Disregarding real string
3852
  * You may set the caption string encoding by putting
3780
    length, no more than 255 characters are drawn.
3853
    at the start of the string a byte with next values:
-
 
3854
    1 = cp866
-
 
3855
    2 = UTF-16LE
-
 
3856
    3 = UTF-8
-
 
3857
    otherwise will be used cp866.
3781
  * Pass NULL in ecx to remove caption.
3858
  * Pass NULL in ecx to remove caption.
3782
 
3859
 
3783
======================================================================
3860
======================================================================
3784
=============== Function 72 - send message to a window. ==============
3861
=============== Function 72 - send message to a window. ==============
3785
======================================================================
3862
======================================================================
3786
 
3863
 
3787
- Subfunction 1 - send message with parameter to the active window. --
3864
- Subfunction 1 - send message with parameter to the active window. --
3788
Parameters:
3865
Parameters:
3789
  * eax = 72 - function number
3866
  * eax = 72 - function number
3790
  * ebx = 1 - subfunction number
3867
  * ebx = 1 - subfunction number
3791
  * ecx = event code: 2 or 3
3868
  * ecx = event code: 2 or 3
3792
  * edx = parameter: key code for ecx=2, button identifier for ecx=3
3869
  * edx = parameter: key code for ecx=2, button identifier for ecx=3
3793
Returned value:
3870
Returned value:
3794
  * eax = 0 - success
3871
  * eax = 0 - success
3795
  * eax = 1 - buffer is full
3872
  * eax = 1 - buffer is full
3796
 
3873
 
3797
======================================================================
3874
======================================================================
3798
===================== Function 73 - blit bitmap  =====================
3875
===================== Function 73 - blit bitmap  =====================
3799
======================================================================
3876
======================================================================
3800
 
3877
 
3801
Parameters:
3878
Parameters:
3802
  * eax = 73 - function number
3879
  * eax = 73 - function number
3803
 
3880
 
3804
  * ebx = ROP and optional flags
3881
  * ebx = ROP and optional flags
3805
     31           6 5  4 3   0
3882
     31           6 5  4 3   0
3806
     [  reserved  ][T][B][ROP]
3883
     [  reserved  ][T][B][ROP]
3807
     ROP - raster operation code
3884
     ROP - raster operation code
3808
        0: Copy
3885
        0: Copy
3809
     1-15: reserved
3886
     1-15: reserved
3810
     B   - blit into the background surface
3887
     B   - blit into the background surface
3811
     T   - transparent blit
3888
     T   - transparent blit
3812
 
3889
 
3813
  * ecx = pointer to the function parameters
3890
  * ecx = pointer to the function parameters
3814
        destination offset and clipping
3891
        destination offset and clipping
3815
     +0 signed dword: destination rectangle X offset from the window
3892
     +0 signed dword: destination rectangle X offset from the window
3816
                      top-left corner
3893
                      top-left corner
3817
     +4 signed dword: destination rectangle Y offset from the window
3894
     +4 signed dword: destination rectangle Y offset from the window
3818
                      top-left corner
3895
                      top-left corner
3819
     +8 dword:        destination rectangle width
3896
     +8 dword:        destination rectangle width
3820
    +12 dword:        destination rectangle height
3897
    +12 dword:        destination rectangle height
3821
 
3898
 
3822
        source offset and clipping
3899
        source offset and clipping
3823
    +16 signed dword: source rectangle X offset from the bitmap
3900
    +16 signed dword: source rectangle X offset from the bitmap
3824
                      top-left corner
3901
                      top-left corner
3825
    +20 signed dword: source rectangle Y offset from the bitmap
3902
    +20 signed dword: source rectangle Y offset from the bitmap
3826
                      top-left corner
3903
                      top-left corner
3827
    +24 dword:        source rectangle width
3904
    +24 dword:        source rectangle width
3828
    +28 dword:        source rectangle height
3905
    +28 dword:        source rectangle height
3829
 
3906
 
3830
    +32: dword: bitmap data - must be 32bpp
3907
    +32: dword: bitmap data - must be 32bpp
3831
    +36: dword: size of the bitmap row in bytes
3908
    +36: dword: size of the bitmap row in bytes
3832
 
3909
 
3833
Returned value:
3910
Returned value:
3834
  * function does not return value
3911
  * function does not return value
3835
 
3912
 
3836
======================================================================
3913
======================================================================
3837
= Function 74, Subfunction -1, Get number of active network devices. =
3914
= Function 74, Subfunction 255, Get number of active network devices. =
3838
======================================================================
3915
======================================================================
3839
Parameters:
3916
Parameters:
3840
  * eax = 74 - function number
3917
  * eax = 74 - function number
3841
  * bl = -1 - subfunction number
3918
  * bl = 255 - subfunction number
3842
Returned value:
3919
Returned value:
3843
  * eax = number of active network devices
3920
  * eax = number of active network devices
3844
 
3921
 
3845
======================================================================
3922
======================================================================
3846
======== Function 74, Subfunction 0, Get network device type. ========
3923
======== Function 74, Subfunction 0, Get network device type. ========
3847
======================================================================
3924
======================================================================
3848
Parameters:
3925
Parameters:
3849
  * eax = 74 - function number
3926
  * eax = 74 - function number
3850
  * bl = 0 - subfunction number
3927
  * bl = 0 - subfunction number
3851
  * bh = device number
3928
  * bh = device number
3852
Returned value:
3929
Returned value:
3853
  * eax = device type
3930
  * eax = device type number
3854
 
3931
 
3855
======================================================================
3932
======================================================================
3856
======== Function 74, Subfunction 1, Get network device name. ========
3933
======== Function 74, Subfunction 1, Get network device name. ========
3857
======================================================================
3934
======================================================================
3858
Parameters:
3935
Parameters:
3859
  * eax = 74 - function number
3936
  * eax = 74 - function number
3860
  * bl = 1 - subfunction number
3937
  * bl = 1 - subfunction number
3861
  * bh = device number
3938
  * bh = device number
3862
  * ecx = pointer to 64 byte buffer
3939
  * ecx = pointer to 64 byte buffer
3863
Returned value:
3940
Returned value:
3864
  * eax = -1 on error
3941
  * eax = -1 on error
3865
  * The network device name is written into the buffer, on success
3942
  * The network device name is written into the buffer, on success
3866
 
3943
 
3867
======================================================================
3944
======================================================================
3868
========= Function 74, Subfunction 2, Reset network device. ==========
3945
========= Function 74, Subfunction 2, Reset network device. ==========
3869
======================================================================
3946
======================================================================
3870
Parameters:
3947
Parameters:
3871
  * eax = 74 - function number
3948
  * eax = 74 - function number
3872
  * bl = 2 - subfunction number
3949
  * bl = 2 - subfunction number
3873
  * bh = device number
3950
  * bh = device number
3874
Returned value:
3951
Returned value:
3875
  * eax = -1 on error
3952
  * eax = -1 on error
3876
 
3953
 
3877
======================================================================
3954
======================================================================
3878
========== Function 74, Subfunction 3, Stop network device. ==========
3955
========== Function 74, Subfunction 3, Stop network device. ==========
3879
======================================================================
3956
======================================================================
3880
Parameters:
3957
Parameters:
3881
  * eax = 74 - function number
3958
  * eax = 74 - function number
3882
  * bl = 3 - subfunction number
3959
  * bl = 3 - subfunction number
3883
  * bh = device number
3960
  * bh = device number
3884
Returned value:
3961
Returned value:
3885
  * eax = -1 on error
3962
  * eax = -1 on error
3886
 
3963
 
3887
======================================================================
3964
======================================================================
-
 
3965
=========== Function 74, Subfunction 4, Get device pointer. ==========
-
 
3966
======================================================================
-
 
3967
Parameters:
-
 
3968
  * eax = 74 - function number
-
 
3969
  * bl = 4 - subfunction number
-
 
3970
  * bh = device number
-
 
3971
Returned value:
-
 
3972
  * eax = device pointer, -1 on error
-
 
3973
 
-
 
3974
======================================================================
-
 
3975
========= Function 74, Subfunction 6, Get packet TX counter. =========
-
 
3976
======================================================================
-
 
3977
Parameters:
-
 
3978
  * eax = 74 - function number
-
 
3979
  * bl = 6 - subfunction number
-
 
3980
  * bh = device number
-
 
3981
Returned value:
-
 
3982
  * eax = Number of packets sent since device start, -1 on error
-
 
3983
 
-
 
3984
======================================================================
-
 
3985
========= Function 74, Subfunction 7, Get packet RX counter. =========
-
 
3986
======================================================================
-
 
3987
Parameters:
-
 
3988
  * eax = 74 - function number
-
 
3989
  * bl = 7 - subfunction number
-
 
3990
  * bh = device number
-
 
3991
Returned value:
-
 
3992
  * eax = Number of packets received since device start, -1 on error
-
 
3993
 
-
 
3994
======================================================================
-
 
3995
========== Function 74, Subfunction 8, Get TX byte counter. ==========
-
 
3996
======================================================================
-
 
3997
Parameters:
-
 
3998
  * eax = 74 - function number
-
 
3999
  * bl = 8 - subfunction number
-
 
4000
  * bh = device number
-
 
4001
Returned value:
-
 
4002
  * eax = Number of bytes sent since device start (lower dword)
-
 
4003
                  -1 on error
-
 
4004
  * ebx = Number of bytes sent since device start (higher dword)
-
 
4005
 
-
 
4006
======================================================================
-
 
4007
========== Function 74, Subfunction 9, Get RX byte counter. ==========
-
 
4008
======================================================================
-
 
4009
Parameters:
-
 
4010
  * eax = 74 - function number
-
 
4011
  * bl = 9 - subfunction number
-
 
4012
  * bh = device number
-
 
4013
Returned value:
-
 
4014
  * eax = Number of bytes received since device start (lower dword)
-
 
4015
                  -1 on error
-
 
4016
  * ebx = Number of bytes received since device start (higher dword)
-
 
4017
 
-
 
4018
======================================================================
-
 
4019
========== Function 74, Subfunction 10, Get link status. =============
-
 
4020
======================================================================
-
 
4021
Parameters:
-
 
4022
  * eax = 74 - function number
-
 
4023
  * bl = 10 - subfunction number
-
 
4024
  * bh = device number
-
 
4025
Returned value:
-
 
4026
  * eax = link status, -1 on error
-
 
4027
 
-
 
4028
  Link status:
-
 
4029
    ETH_LINK_DOWN   =    0b         ; Link is down
-
 
4030
    ETH_LINK_UNKNOWN=    1b         ; There could be an active link
-
 
4031
    ETH_LINK_FD     =   10b         ; full duplex flag
-
 
4032
    ETH_LINK_10M    =  100b         ; 10 mbit
-
 
4033
    ETH_LINK_100M   = 1000b         ; 100 mbit
-
 
4034
    ETH_LINK_1G     = 1100b         ; gigabit
-
 
4035
 
-
 
4036
======================================================================
3888
============== Function 75, Subfunction 0, Open socket. ==============
4037
============== Function 75, Subfunction 0, Open socket. ==============
3889
======================================================================
4038
======================================================================
3890
Parameters:
4039
Parameters:
3891
  * eax = 75 - function number
4040
  * eax = 75 - function number
3892
  * bl = 0 - subfunction number
4041
  * bl = 0 - subfunction number
3893
  * ecx = domain
4042
  * ecx = domain
3894
  * edx = type
4043
  * edx = type
3895
  * esi = protocol
4044
  * esi = protocol
3896
Returned value:
4045
Returned value:
3897
  * eax = socket number, -1 on error
4046
  * eax = socket number, -1 on error
3898
  * ebx = errorcode
4047
  * ebx = errorcode
3899
 
4048
 
3900
======================================================================
4049
======================================================================
3901
============= Function 75, Subfunction 1, Close socket. ==============
4050
============= Function 75, Subfunction 1, Close socket. ==============
3902
======================================================================
4051
======================================================================
3903
Parameters:
4052
Parameters:
3904
  * eax = 75 - function number
4053
  * eax = 75 - function number
3905
  * bl = 1 - subfunction number
4054
  * bl = 1 - subfunction number
3906
  * ecx = socket number
4055
  * ecx = socket number
3907
Returned value:
4056
Returned value:
3908
  * eax = -1 on error
4057
  * eax = -1 on error
3909
  * ebx = errorcode
4058
  * ebx = errorcode
3910
 
4059
 
3911
======================================================================
4060
======================================================================
3912
================== Function 75, Subfunction 2, Bind. =================
4061
================== Function 75, Subfunction 2, Bind. =================
3913
======================================================================
4062
======================================================================
3914
Parameters:
4063
Parameters:
3915
  * eax = 75 - function number
4064
  * eax = 75 - function number
3916
  * bl = 2 - subfunction number
4065
  * bl = 2 - subfunction number
3917
  * ecx = socket number
4066
  * ecx = socket number
3918
  * edx = pointer to sockaddr structure
4067
  * edx = pointer to sockaddr structure
3919
  * esi = length of sockaddr structure
4068
  * esi = length of sockaddr structure
3920
Returned value:
4069
Returned value:
3921
  * eax = -1 on error
4070
  * eax = -1 on error
3922
  * ebx = errorcode
4071
  * ebx = errorcode
3923
 
4072
 
3924
======================================================================
4073
======================================================================
3925
================= Function 75, Subfunction 3, Listen. ================
4074
================= Function 75, Subfunction 3, Listen. ================
3926
======================================================================
4075
======================================================================
3927
Parameters:
4076
Parameters:
3928
  * eax = 75 - function number
4077
  * eax = 75 - function number
3929
  * bl = 3 - subfunction number
4078
  * bl = 3 - subfunction number
3930
  * ecx = socket number
4079
  * ecx = socket number
3931
  * edx = backlog
4080
  * edx = backlog
3932
Returned value:
4081
Returned value:
3933
  * eax = -1 on error
4082
  * eax = -1 on error
3934
  * ebx = errorcode
4083
  * ebx = errorcode
3935
 
4084
 
3936
======================================================================
4085
======================================================================
3937
================ Function 75, Subfunction 4, Connect. ================
4086
================ Function 75, Subfunction 4, Connect. ================
3938
======================================================================
4087
======================================================================
3939
Parameters:
4088
Parameters:
3940
  * eax = 75 - function number
4089
  * eax = 75 - function number
3941
  * bl = 4 - subfunction number
4090
  * bl = 4 - subfunction number
3942
  * ecx = socket number
4091
  * ecx = socket number
3943
  * edx = pointer to sockaddr structure
4092
  * edx = pointer to sockaddr structure
3944
  * esi = length of sockaddr structure
4093
  * esi = length of sockaddr structure
3945
Returned value:
4094
Returned value:
3946
  * eax = -1 on error
4095
  * eax = -1 on error
3947
  * ebx = errorcode
4096
  * ebx = errorcode
3948
 
4097
 
3949
======================================================================
4098
======================================================================
3950
================= Function 75, Subfunction 5, Accept. ================
4099
================= Function 75, Subfunction 5, Accept. ================
3951
======================================================================
4100
======================================================================
3952
Parameters:
4101
Parameters:
3953
  * eax = 75 - function number
4102
  * eax = 75 - function number
3954
  * bl = 5 - subfunction number
4103
  * bl = 5 - subfunction number
3955
  * ecx = socket number
4104
  * ecx = socket number
3956
  * edx = pointer to sockaddr structure
4105
  * edx = pointer to sockaddr structure
3957
  * esi = length of sockaddr structure
4106
  * esi = length of sockaddr structure
3958
Returned value:
4107
Returned value:
3959
  * eax = socket number of accepted socket, -1 on error
4108
  * eax = socket number of accepted socket, -1 on error
3960
  * ebx = errorcode
4109
  * ebx = errorcode
3961
 
4110
 
3962
======================================================================
4111
======================================================================
3963
================== Function 75, Subfunction 6, Send. =================
4112
================== Function 75, Subfunction 6, Send. =================
3964
======================================================================
4113
======================================================================
3965
Parameters:
4114
Parameters:
3966
  * eax = 75 - function number
4115
  * eax = 75 - function number
3967
  * bl = 6 - subfunction number
4116
  * bl = 6 - subfunction number
3968
  * ecx = socket number
4117
  * ecx = socket number
3969
  * edx = pointer to buffer
4118
  * edx = pointer to buffer
3970
  * esi = length of buffer
4119
  * esi = length of buffer
3971
  * edi = flags
4120
  * edi = flags
3972
Returned value:
4121
Returned value:
3973
  * eax = number of bytes copied, -1 on error
4122
  * eax = number of bytes copied, -1 on error
3974
  * ebx = errorcode
4123
  * ebx = errorcode
3975
 
4124
 
3976
======================================================================
4125
======================================================================
3977
================ Function 75, Subfunction 7, Receive. ================
4126
================ Function 75, Subfunction 7, Receive. ================
3978
======================================================================
4127
======================================================================
3979
Parameters:
4128
Parameters:
3980
  * eax = 75 - function number
4129
  * eax = 75 - function number
3981
  * bl = 7 - subfunction number
4130
  * bl = 7 - subfunction number
3982
  * ecx = socket number
4131
  * ecx = socket number
3983
  * edx = pointer to buffer
4132
  * edx = pointer to buffer
3984
  * esi = length of buffer
4133
  * esi = length of buffer
3985
  * edi = flags
4134
  * edi = flags
3986
Returned value:
4135
Returned value:
3987
  * eax = number of bytes copied, -1 on error
4136
  * eax = number of bytes copied, -1 on error
3988
  * ebx = errorcode
4137
  * ebx = errorcode
3989
 
4138
 
3990
======================================================================
4139
======================================================================
3991
=========== Function 75, Subfunction 8, Set socket options. ==========
4140
=========== Function 75, Subfunction 8, Set socket options. ==========
3992
======================================================================
4141
======================================================================
3993
Parameters:
4142
Parameters:
3994
  * eax = 75 - function number
4143
  * eax = 75 - function number
3995
  * bl = 8 - subfunction number
4144
  * bl = 8 - subfunction number
3996
  * ecx = socket number
4145
  * ecx = socket number
3997
  * edx = pointer to optstruct
4146
  * edx = pointer to optstruct
3998
Returned value:
4147
Returned value:
3999
  * eax = -1 on error
4148
  * eax = -1 on error
4000
  * ebx = errorcode
4149
  * ebx = errorcode
4001
Remarks:
4150
Remarks:
4002
 
4151
 
-
 
4152
  Optstruct: 
4003
  Optstruct: dd level
4153
    dd level
4004
             dd optionname
4154
    dd optionname
4005
             dd optlength
4155
    dd optlength
4006
             db options...
4156
    db options...
4007
 
4157
 
4008
======================================================================
4158
======================================================================
4009
=========== Function 75, Subfunction 9, Get socket options. ==========
4159
=========== Function 75, Subfunction 9, Get socket options. ==========
4010
======================================================================
4160
======================================================================
4011
Parameters:
4161
Parameters:
4012
  * eax = 75 - function number
4162
  * eax = 75 - function number
4013
  * bl = 9 - subfunction number
4163
  * bl = 9 - subfunction number
4014
  * ecx = socket number
4164
  * ecx = socket number
4015
  * edx = pointer to optstruct
4165
  * edx = pointer to optstruct
4016
Returned value:
4166
Returned value:
4017
  * eax = -1 on error
4167
  * eax = -1 on error
4018
  * ebx = errorcode
4168
  * ebx = errorcode
4019
Remarks:
4169
Remarks:
4020
 
4170
 
-
 
4171
  Optstruct: 
4021
  Optstruct: dd level
4172
    dd level
4022
             dd optionname
4173
    dd optionname
4023
             dd optlength
4174
    dd optlength
4024
             db options...
4175
    db options...
4025
 
4176
 
4026
======================================================================
4177
======================================================================
4027
============ Function 75, Subfunction 10, Get socketpair. ===========
4178
============ Function 75, Subfunction 10, Get socketpair. ===========
4028
======================================================================
4179
======================================================================
4029
Parameters:
4180
Parameters:
4030
  * eax = 75 - function number
4181
  * eax = 75 - function number
4031
  * bl = 10 - subfunction number
4182
  * bl = 10 - subfunction number
4032
Returned value:
4183
Returned value:
4033
  * eax = socketnum1, -1 on error
4184
  * eax = socketnum1, -1 on error
4034
  * ebx = socketnum2, errorcode on error
4185
  * ebx = socketnum2, errorcode on error
-
 
4186
  
-
 
4187
======================================================================
-
 
4188
============ Function 76, Network options and statistics. ============
-
 
4189
======================================================================
-
 
4190
Parameters:
-
 
4191
  * eax = 76 - function number
-
 
4192
  * high half of ebx = protocol number
-
 
4193
  * bh = device number
-
 
4194
  * bl = subfunction number
-
 
4195
 
-
 
4196
Ethernet (0)
-
 
4197
        0 - Read MAC
-
 
4198
        
-
 
4199
IPv4 (1)
-
 
4200
        0 - Read # IP packets send
-
 
4201
        1 - Read # IP packets received
-
 
4202
        2 - Read IP
-
 
4203
        3 - Write IP
-
 
4204
        4 - Read DNS
-
 
4205
        5 - Write DNS
-
 
4206
        6 - Read subnet
-
 
4207
        7 - Write subnet
-
 
4208
        8 - Read gateway
-
 
4209
        9 - Write gateway
-
 
4210
        
-
 
4211
ICMP (2)
-
 
4212
        0 - Read # ICMP packets send
-
 
4213
        1 - Read # ICMP packets received
-
 
4214
        3 - enable/disable ICMP echo reply
-
 
4215
 
-
 
4216
UDP (3)
-
 
4217
        0 - Read # UDP packets send
-
 
4218
        1 - Read # UDP packets received
-
 
4219
 
-
 
4220
TCP (4)
-
 
4221
        0 - Read # TCP packets send
-
 
4222
        1 - Read # TCP packets received 
-
 
4223
        
-
 
4224
ARP (5)
-
 
4225
        0 - Read # ARP packets send
-
 
4226
        1 - Read # ARP packets received
-
 
4227
        2 - Read # ARP entry's
-
 
4228
        3 - Read ARP entry
-
 
4229
        4 - Add static ARP entry
-
 
4230
        5 - Remove ARP entry (-1 = remove all)
-
 
4231
        6 - Send ARP announce on specified interface
-
 
4232
        7 - Read # ARP conflicts (IP address conflicts) 
4035
 
4233
 
4036
======================================================================
4234
======================================================================
4037
=============== Function -1 - terminate thread/process ===============
4235
=============== Function -1 - terminate thread/process ===============
4038
======================================================================
4236
======================================================================
4039
Parameters:
4237
Parameters:
4040
  * eax = -1 - function number
4238
  * eax = -1 - function number
4041
Returned value:
4239
Returned value:
4042
  * function does not return neither value nor control
4240
  * function does not return neither value nor control
4043
Remarks:
4241
Remarks:
4044
  * If the process did not create threads obviously, it has only
4242
  * If the process did not create threads obviously, it has only
4045
    one thread, which termination results in process termination.
4243
    one thread, which termination results in process termination.
4046
  * If the current thread is last in the process, its termination
4244
  * If the current thread is last in the process, its termination
4047
    also results in process terminates.
4245
    also results in process terminates.
4048
  * This function terminates the current thread. Other thread can be
4246
  * This function terminates the current thread. Other thread can be
4049
    killed by call to subfunction 2 of function 18.
4247
    killed by call to subfunction 2 of function 18.
4050
 
4248
 
4051
======================================================================
4249
======================================================================
4052
=========================== List of events ===========================
4250
=========================== List of events ===========================
4053
======================================================================
4251
======================================================================
4054
Next event can be retrieved by the call of one from functions 10
4252
Next event can be retrieved by the call of one from functions 10
4055
(to wait for event), 11 (to check without waiting), 23
4253
(to wait for event), 11 (to check without waiting), 23
4056
(to wait during the given time).
4254
(to wait during the given time).
4057
These functions return only those events, which enter into a mask set
4255
These functions return only those events, which enter into a mask set
4058
by function 40. By default it is first three,
4256
by function 40. By default it is first three,
4059
there is enough for most applications.
4257
there is enough for most applications.
4060
Codes of events:
4258
Codes of events:
4061
  * 1 = redraw event (is reset by call to function 0)
4259
  * 1 = redraw event (is reset by call to function 0)
4062
  * 2 = key on keyboard is pressed (acts, only when the window is
4260
  * 2 = key on keyboard is pressed (acts, only when the window is
4063
    active) or hotkey is pressed; is reset, when all keys from
4261
    active) or hotkey is pressed; is reset, when all keys from
4064
    the buffer are read out by function 2
4262
    the buffer are read out by function 2
4065
  * 3 = button is pressed, defined earlier by function 8
4263
  * 3 = button is pressed, defined earlier by function 8
4066
    (or close button, created implicitly by function 0;
4264
    (or close button, created implicitly by function 0;
4067
    minimize button is handled by the system and sends no message;
4265
    minimize button is handled by the system and sends no message;
4068
    acts, only when the window is active;
4266
    acts, only when the window is active;
4069
    is reset when all buttons from the buffer
4267
    is reset when all buttons from the buffer
4070
    are read out by function 17)
4268
    are read out by function 17)
4071
  * 4 = reserved (in current implementation never comes even after
4269
  * 4 = reserved (in current implementation never comes even after
4072
    unmasking by function 40)
4270
    unmasking by function 40)
4073
  * 5 = kernel finished redrawing of the desktop background
4271
  * 5 = kernel finished redrawing of the desktop background
4074
  * 6 = mouse event (something happened - button pressing or moving;
4272
  * 6 = mouse event (something happened - button pressing or moving;
4075
    is reset at reading)
4273
    is reset at reading)
4076
  * 7 = IPC event (see function 60 -
4274
  * 7 = IPC event (see function 60 -
4077
    Inter Process Communication; is reset at reading)
4275
    Inter Process Communication; is reset at reading)
4078
  * 8 = network event (is reset at reading)
4276
  * 8 = network event (is reset at reading)
4079
  * 9 = debug event (is reset at reading; see
4277
  * 9 = debug event (is reset at reading; see
4080
    debug subsystem)
4278
    debug subsystem)
4081
  * 16..31 = event with appropriate IRQ
4279
  * 16..31 = event with appropriate IRQ
4082
    (16=IRQ0, 31=IRQ15) (is reset after reading all IRQ data)
4280
    (16=IRQ0, 31=IRQ15) (is reset after reading all IRQ data)
4083
 
4281
 
4084
======================================================================
4282
======================================================================
4085
=================== Error codes of the file system ===================
4283
=================== Error codes of the file system ===================
4086
======================================================================
4284
======================================================================
4087
  * 0 = success
4285
  * 0 = success
4088
  * 1 = base and/or partition of a hard disk is not defined
4286
  * 1 = base and/or partition of a hard disk is not defined
4089
    (by subfunctions 7, 8 of function 21)
4287
    (by subfunctions 7, 8 of function 21)
4090
  * 2 = function is not supported for the given file system
4288
  * 2 = function is not supported for the given file system
4091
  * 3 = unknown file system
4289
  * 3 = unknown file system
4092
  * 4 = reserved, is never returned in the current implementation
4290
  * 4 = reserved, is never returned in the current implementation
4093
  * 5 = file not found
4291
  * 5 = file not found
4094
  * 6 = end of file, EOF
4292
  * 6 = end of file, EOF
4095
  * 7 = pointer lies outside of application memory
4293
  * 7 = pointer lies outside of application memory
4096
  * 8 = disk is full
4294
  * 8 = disk is full
4097
  * 9 = FAT table is destroyed
4295
  * 9 = FAT table is destroyed
4098
  * 10 = access denied
4296
  * 10 = access denied
4099
  * 11 = device error
4297
  * 11 = device error
4100
Application start functions can return also following errors:
4298
Application start functions can return also following errors:
4101
  * 30 = 0x1E = not enough memory
4299
  * 30 = 0x1E = not enough memory
4102
  * 31 = 0x1F = file is not executable
4300
  * 31 = 0x1F = file is not executable
4103
  * 32 = 0x20 = too many processes
4301
  * 32 = 0x20 = too many processes
4104
>
4302
>
4105
>
4303
>