Subversion Repositories Kolibri OS

Rev

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

Rev 3787 Rev 3835
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=2)
36
      of the working area of the window (are ignored for style Y=2)
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
49
    * Y=0 - usual window, Y=1 - unmovable window
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(25,ysize)) color indicated in esi
85
      right lower (xsize-1,min(25,ysize)) color indicated in esi
86
      (taking a gradient into account)
86
      (taking a gradient into account)
87
    * if ysize>=26, fill the working area of the window -
87
    * if ysize>=26, 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, high word of eax is zero
151
    ah=code of the pressed key, high word of eax is zero
152
  * if there is "hotkey", function returns al=2,
152
  * if there is "hotkey", function returns al=2,
153
    ah=scancode of the pressed key (0 for control keys),
153
    ah=scancode of the pressed key (0 for control keys),
154
    high word of eax contains a status of control keys at the moment
154
    high word of eax contains a status of control keys at the moment
155
    of pressing a hotkey
155
    of pressing a hotkey
156
Remarks:
156
Remarks:
157
  * There is a common system buffer of the pressed keys
157
  * There is a common system buffer of the pressed keys
158
    by a size of 120 bytes, organized as queue.
158
    by a size of 120 bytes, organized as queue.
159
  * There is one more common system buffer on 120 "hotkeys".
159
  * There is one more common system buffer on 120 "hotkeys".
160
  * If the application with the inactive window calls this function,
160
  * If the application with the inactive window calls this function,
161
    the buffer of the pressed keys is considered to be empty.
161
    the buffer of the pressed keys is considered to be empty.
162
  * By default this function returns ASCII-codes; to switch
162
  * By default this function returns ASCII-codes; to switch
163
    to the scancodes mode (and back) use function 66.
163
    to the scancodes mode (and back) use function 66.
164
    However, hotkeys are always notificated as scancodes.
164
    However, hotkeys are always notificated as scancodes.
165
  * To find out, what keys correspond to what codes, start
165
  * To find out, what keys correspond to what codes, start
166
    the application keyascii and scancode.
166
    the application keyascii and scancode.
167
  * Scancodes come directly from keyboard and are fixed;
167
  * Scancodes come directly from keyboard and are fixed;
168
    ASCII-codes turn out with usage of the conversion tables,
168
    ASCII-codes turn out with usage of the conversion tables,
169
    which can be set by subfunction 2 of function 21
169
    which can be set by subfunction 2 of function 21
170
    and get by subfunction 2 of function 26.
170
    and get by subfunction 2 of function 26.
171
  * As a consequence, ASCII-codes take into account current
171
  * As a consequence, ASCII-codes take into account current
172
    keyboard layout (rus/en) as opposed to scancodes.
172
    keyboard layout (rus/en) as opposed to scancodes.
173
  * This function notifies only about those hotkeys, which were
173
  * This function notifies only about those hotkeys, which were
174
    defined by this thread by subfunction 4 of function 66.
174
    defined by this thread by subfunction 4 of function 66.
175
 
175
 
176
======================================================================
176
======================================================================
177
==================== Function 3 - get system time. ===================
177
==================== Function 3 - get system time. ===================
178
======================================================================
178
======================================================================
179
Parameters:
179
Parameters:
180
  * eax = 3 - function number
180
  * eax = 3 - function number
181
Returned value:
181
Returned value:
182
  * eax = 0x00SSMMHH, where HH:MM:SS = Hours:Minutes:Seconds
182
  * eax = 0x00SSMMHH, where HH:MM:SS = Hours:Minutes:Seconds
183
  * each item is BCD-number, for example,
183
  * each item is BCD-number, for example,
184
    for time 23:59:59 function returns 0x00595923
184
    for time 23:59:59 function returns 0x00595923
185
Remarks:
185
Remarks:
186
  * See also subfunction 9 of function 26 - get time from
186
  * See also subfunction 9 of function 26 - get time from
187
    the moment of start of the system; it is more convenient, because
187
    the moment of start of the system; it is more convenient, because
188
    returns simply DWORD-value of the time counter.
188
    returns simply DWORD-value of the time counter.
189
  * System time can be set by function 22.
189
  * System time can be set by function 22.
190
 
190
 
191
======================================================================
191
======================================================================
192
============ Function 4 - draw text string in the window. ============
192
============ Function 4 - draw text string in the window. ============
193
======================================================================
193
======================================================================
194
Parameters:
194
Parameters:
195
  * eax = 4 - function number
195
  * eax = 4 - function number
196
  * ebx = [coordinate on axis x]*65536 + [coordinate on axis y]
196
  * ebx = [coordinate on axis x]*65536 + [coordinate on axis y]
197
  * ecx = 0xXYRRGGBB, where
197
  * ecx = 0xXYRRGGBB, where
198
    * RR, GG, BB specify text color
198
    * RR, GG, BB specify text color
199
    * X=ABnn (bits):
199
    * X=ABnn (bits):
200
      * nn specifies the used font: 0=system monospaced,
200
      * nn specifies the used font: 0=system monospaced,
201
        1=system font of variable width
201
        1=system font of variable width
202
      * A=0 - output esi characters, A=1 - output ASCIIZ-string
202
      * A=0 - output esi characters, A=1 - output ASCIIZ-string
203
      * B=1 - fill background with the color edi
203
      * B=1 - fill background with the color edi
204
    * Y = Cnnn
204
    * Y = Cnnn
205
      * C=1 redirect the output to the user area, specified in edi
205
      * C=1 redirect the output to the user area, specified in edi
206
      * nnn - not used in the current, must be 0 (zero)
206
      * nnn - not used in the current, must be 0 (zero)
207
  * edx = pointer to the beginning of the string
207
  * edx = pointer to the beginning of the string
208
  * esi = for A=0 length of the string, must not exceed 255;
208
  * esi = for A=0 length of the string, must not exceed 255;
209
          for A=1 is ignored
209
          for A=1 is ignored
210
  * edi = color to fill background, if B=1
210
  * edi = color to fill background, if B=1
211
  * edi = pointer to user area, for redirect, if C=1
211
  * edi = pointer to user area, for redirect, if C=1
212
 
212
 
213
Returned value:
213
Returned value:
214
  * function does not return value
214
  * function does not return value
215
Remarks:
215
Remarks:
216
  * First system font is read out at loading from the file char.mt,
216
  * First system font is read out at loading from the file char.mt,
217
    second - from char2.mt.
217
    second - from char2.mt.
218
  * Both fonts have height 9 pixels, width of the monospaced font
218
  * Both fonts have height 9 pixels, width of the monospaced font
219
    is equal to 6 pixels.
219
    is equal to 6 pixels.
220
  * C=1, pixel depth = 32 bits, user area is as follows:
220
  * C=1, pixel depth = 32 bits, user area is as follows:
221
    dword Xsize
221
    dword Xsize
222
    dword Ysize
222
    dword Ysize
223
    rest of the area = Xsize * Y size * 4
223
    rest of the area = Xsize * Y size * 4
224
  * You can not use B = 1 and C = 1, at the same time. Since in both
224
  * You can not use B = 1 and C = 1, at the same time. Since in both
225
    cases, the register edi is used for different purposes.
225
    cases, the register edi is used for different purposes.
226
 
226
 
227
======================================================================
227
======================================================================
228
========================= Function 5 - delay. ========================
228
========================= Function 5 - delay. ========================
229
======================================================================
229
======================================================================
230
Delays execution of the program on the given time.
230
Delays execution of the program on the given time.
231
Parameters:
231
Parameters:
232
  * eax = 5 - function number
232
  * eax = 5 - function number
233
  * ebx = time in the 1/100 of second
233
  * ebx = time in the 1/100 of second
234
Returned value:
234
Returned value:
235
  * function does not return value
235
  * function does not return value
236
Remarks:
236
Remarks:
237
  * Passing ebx=0 does not transfer control to the next process
237
  * Passing ebx=0 does not transfer control to the next process
238
    and does not make any operations at all. If it is really required
238
    and does not make any operations at all. If it is really required
239
    to transfer control to the next process (to complete a current
239
    to transfer control to the next process (to complete a current
240
    time slice), use subfunction 1 of function 68.
240
    time slice), use subfunction 1 of function 68.
241
 
241
 
242
======================================================================
242
======================================================================
243
============== Function 6 - read the file from ramdisk. ==============
243
============== Function 6 - read the file from ramdisk. ==============
244
======================================================================
244
======================================================================
245
Parameters:
245
Parameters:
246
  * eax = 6 - function number
246
  * eax = 6 - function number
247
  * ebx = pointer to the filename
247
  * ebx = pointer to the filename
248
  * ecx = number of start block, beginning from 1;
248
  * ecx = number of start block, beginning from 1;
249
    ecx=0 - read from the beginning of the file (same as ecx=1)
249
    ecx=0 - read from the beginning of the file (same as ecx=1)
250
  * edx = number of blocks to read;
250
  * edx = number of blocks to read;
251
    edx=0 - read one block (same as edx=1)
251
    edx=0 - read one block (same as edx=1)
252
  * esi = pointer to memory area for the data
252
  * esi = pointer to memory area for the data
253
Returned value:
253
Returned value:
254
  * eax = file size in bytes, if the file was successfully read
254
  * eax = file size in bytes, if the file was successfully read
255
  * eax = -1, if the file was not found
255
  * eax = -1, if the file was not found
256
Remarks:
256
Remarks:
257
  * This function is out-of-date; function 70 allows
257
  * This function is out-of-date; function 70 allows
258
    to fulfil the same operations with the extended possibilities.
258
    to fulfil the same operations with the extended possibilities.
259
  * Block = 512 bytes.
259
  * Block = 512 bytes.
260
  * For reading all file you can specify the certainly large value
260
  * For reading all file you can specify the certainly large value
261
    in edx, for example, edx = -1; but in this case be ready that
261
    in edx, for example, edx = -1; but in this case be ready that
262
    the program will "fall", if the file will appear too large and can
262
    the program will "fall", if the file will appear too large and can
263
    not be placed in the program memory.
263
    not be placed in the program memory.
264
  * The filename must be either in the format 8+3 characters
264
  * The filename must be either in the format 8+3 characters
265
    (first 8 characters - name itself, last 3 - extension,
265
    (first 8 characters - name itself, last 3 - extension,
266
    the short names and extensions are supplemented with spaces),
266
    the short names and extensions are supplemented with spaces),
267
    or in the format 8.3 characters "FILE.EXT"/"FILE.EX "
267
    or in the format 8.3 characters "FILE.EXT"/"FILE.EX "
268
    (name no more than 8 characters, dot, extension 3 characters
268
    (name no more than 8 characters, dot, extension 3 characters
269
    supplemented if necessary by spaces).
269
    supplemented if necessary by spaces).
270
    The filename must be written with capital letters. The terminating
270
    The filename must be written with capital letters. The terminating
271
    character with code 0 is not necessary (not ASCIIZ-string).
271
    character with code 0 is not necessary (not ASCIIZ-string).
272
  * This function does not support folders on the ramdisk.
272
  * This function does not support folders on the ramdisk.
273
 
273
 
274
======================================================================
274
======================================================================
275
=============== Function 7 - draw image in the window. ===============
275
=============== Function 7 - draw image in the window. ===============
276
======================================================================
276
======================================================================
277
Paramters:
277
Paramters:
278
  * eax = 7 - function number
278
  * eax = 7 - function number
279
  * ebx = pointer to the image in the format BBGGRRBBGGRR...
279
  * ebx = pointer to the image in the format BBGGRRBBGGRR...
280
  * ecx = [size on axis x]*65536 + [size on axis y]
280
  * ecx = [size on axis x]*65536 + [size on axis y]
281
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
281
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
282
Returned value:
282
Returned value:
283
  * function does not return value
283
  * function does not return value
284
Remarks:
284
Remarks:
285
  * Coordinates of the image are coordinates of the upper left corner
285
  * Coordinates of the image are coordinates of the upper left corner
286
    of the image relative to the window.
286
    of the image relative to the window.
287
  * Size of the image in bytes is 3*xsize*ysize.
287
  * Size of the image in bytes is 3*xsize*ysize.
288
 
288
 
289
======================================================================
289
======================================================================
290
=============== Function 8 - define/delete the button. ===============
290
=============== Function 8 - define/delete the button. ===============
291
======================================================================
291
======================================================================
292
Parameters for button definition:
292
Parameters for button definition:
293
  * eax = 8 - function number
293
  * eax = 8 - function number
294
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
294
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
295
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
295
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
296
  * edx = 0xXYnnnnnn, where:
296
  * edx = 0xXYnnnnnn, where:
297
    * nnnnnn = identifier of the button
297
    * nnnnnn = identifier of the button
298
    * high (31st) bit of edx is cleared
298
    * high (31st) bit of edx is cleared
299
    * if 30th bit of edx is set - do not draw the button
299
    * if 30th bit of edx is set - do not draw the button
300
    * if 29th bit of edx is set - do not draw a frame
300
    * if 29th bit of edx is set - do not draw a frame
301
      at pressing the button
301
      at pressing the button
302
  * esi = 0x00RRGGBB - color of the button
302
  * esi = 0x00RRGGBB - color of the button
303
Parameters for button deleting:
303
Parameters for button deleting:
304
  * eax = 8 - function number
304
  * eax = 8 - function number
305
  * edx = 0x80nnnnnn, where nnnnnn - identifier of the button
305
  * edx = 0x80nnnnnn, where nnnnnn - identifier of the button
306
Returned value:
306
Returned value:
307
  * function does not return value
307
  * function does not return value
308
Remarks:
308
Remarks:
309
  * Sizes of the button must be more than 0 and less than 0x8000.
309
  * Sizes of the button must be more than 0 and less than 0x8000.
310
  * For skinned windows definition of the window
310
  * For skinned windows definition of the window
311
    (call of 0th function) creates two standard buttons -
311
    (call of 0th function) creates two standard buttons -
312
    for close of the window with identifier 1 and
312
    for close of the window with identifier 1 and
313
    for minimize of the window with identifier 0xffff.
313
    for minimize of the window with identifier 0xffff.
314
  * The creation of two buttons with same identifiers is admitted.
314
  * The creation of two buttons with same identifiers is admitted.
315
  * The button with the identifier 0xffff at pressing is interpreted
315
  * The button with the identifier 0xffff at pressing is interpreted
316
    by the system as the button of minimization, the system handles
316
    by the system as the button of minimization, the system handles
317
    such pressing independently, not accessing to the application.
317
    such pressing independently, not accessing to the application.
318
    In rest it is usual button.
318
    In rest it is usual button.
319
  * Total number of buttons for all applications is limited to 4095.
319
  * Total number of buttons for all applications is limited to 4095.
320
 
320
 
321
======================================================================
321
======================================================================
322
============ Function 9 - information on execution thread. ===========
322
============ Function 9 - information on execution thread. ===========
323
======================================================================
323
======================================================================
324
Parameters:
324
Parameters:
325
  * eax = 9 - function number
325
  * eax = 9 - function number
326
  * ebx = pointer to 1-Kb buffer
326
  * ebx = pointer to 1-Kb buffer
327
  * ecx = number of the slot of the thread
327
  * ecx = number of the slot of the thread
328
    ecx = -1 - get information on the current thread
328
    ecx = -1 - get information on the current thread
329
Returned value:
329
Returned value:
330
  * eax = maximum number of the slot of a thread
330
  * eax = maximum number of the slot of a thread
331
  * buffer pointed to by ebx contains the following information:
331
  * buffer pointed to by ebx contains the following information:
332
    * +0: dword: usage of the processor (how many time units
332
    * +0: dword: usage of the processor (how many time units
333
      per second leaves on execution of this thread)
333
      per second leaves on execution of this thread)
334
    * +4: word: position of the window of thread in the window stack
334
    * +4: word: position of the window of thread in the window stack
335
    * +6: word: (has no relation to the specified thread)
335
    * +6: word: (has no relation to the specified thread)
336
      number of the thread slot, which window has in the window stack
336
      number of the thread slot, which window has in the window stack
337
      position ecx
337
      position ecx
338
    * +8: word: reserved
338
    * +8: word: reserved
339
    * +10 = +0xA: 11 bytes: name of the process
339
    * +10 = +0xA: 11 bytes: name of the process
340
      (name of the started file - executable file without extension)
340
      (name of the started file - executable file without extension)
341
    * +21 = +0x15: byte: reserved, this byte is not changed
341
    * +21 = +0x15: byte: reserved, this byte is not changed
342
    * +22 = +0x16: dword: address of the process in memory
342
    * +22 = +0x16: dword: address of the process in memory
343
    * +26 = +0x1A: dword: size of used memory - 1
343
    * +26 = +0x1A: dword: size of used memory - 1
344
    * +30 = +0x1E: dword: identifier (PID/TID)
344
    * +30 = +0x1E: dword: identifier (PID/TID)
345
    * +34 = +0x22: dword: coordinate of the thread window on axis x
345
    * +34 = +0x22: dword: coordinate of the thread window on axis x
346
    * +38 = +0x26: dword: coordinate of the thread window on axis y
346
    * +38 = +0x26: dword: coordinate of the thread window on axis y
347
    * +42 = +0x2A: dword: size of the thread window on axis x
347
    * +42 = +0x2A: dword: size of the thread window on axis x
348
    * +46 = +0x2E: dword: size of the thread window on axis y
348
    * +46 = +0x2E: dword: size of the thread window on axis y
349
    * +50 = +0x32: word: status of the thread slot:
349
    * +50 = +0x32: word: status of the thread slot:
350
      * 0 = thread is running
350
      * 0 = thread is running
351
      * 1 = thread is suspended
351
      * 1 = thread is suspended
352
      * 2 = thread is suspended while waiting for event
352
      * 2 = thread is suspended while waiting for event
353
      * 3 = thread is terminating as a result of call to function -1
353
      * 3 = thread is terminating as a result of call to function -1
354
        or under duress as a result of call to subfunction 2
354
        or under duress as a result of call to subfunction 2
355
        of function 18 or termination of the system
355
        of function 18 or termination of the system
356
      * 4 = thread is terminating as a result of exception
356
      * 4 = thread is terminating as a result of exception
357
      * 5 = thread waits for event
357
      * 5 = thread waits for event
358
      * 9 = requested slot is free, all other information on the slot
358
      * 9 = requested slot is free, all other information on the slot
359
        is not meaningful
359
        is not meaningful
360
    * +52 = +0x34: word: reserved, this word is not changed
360
    * +52 = +0x34: word: reserved, this word is not changed
361
    * +54 = +0x36: dword: coordinate of the client area on axis x
361
    * +54 = +0x36: dword: coordinate of the client area on axis x
362
    * +58 = +0x3A: dword: coordinate of the client area on axis y
362
    * +58 = +0x3A: dword: coordinate of the client area on axis y
363
    * +62 = +0x3E: dword: width of the client area
363
    * +62 = +0x3E: dword: width of the client area
364
    * +66 = +0x42: dword: height of the client area
364
    * +66 = +0x42: dword: height of the client area
365
    * +70 = +0x46: byte: state of the window - bitfield
365
    * +70 = +0x46: byte: state of the window - bitfield
366
      * bit 0 (mask 1): window is maximized
366
      * bit 0 (mask 1): window is maximized
367
      * bit 1 (mask 2): window is minimized to panel
367
      * bit 1 (mask 2): window is minimized to panel
368
      * bit 2 (mask 4): window is rolled up
368
      * bit 2 (mask 4): window is rolled up
369
    * +71 = +0x47: dword: event mask
369
    * +71 = +0x47: dword: event mask
370
Remarks:
370
Remarks:
371
  * Slots are numbered starting from 1.
371
  * Slots are numbered starting from 1.
372
  * Returned value is not a total number of threads, because there
372
  * Returned value is not a total number of threads, because there
373
    can be free slots.
373
    can be free slots.
374
  * When process is starting, system automatically creates
374
  * When process is starting, system automatically creates
375
    execution thread.
375
    execution thread.
376
  * Function gives information on the thread. Each process has
376
  * Function gives information on the thread. Each process has
377
    at least one thread. One process can create many threads,
377
    at least one thread. One process can create many threads,
378
    in this case each thread has its own slot and the fields
378
    in this case each thread has its own slot and the fields
379
    +10, +22, +26 in these slots coincide.
379
    +10, +22, +26 in these slots coincide.
380
    Applications have no common way to define whether two threads
380
    Applications have no common way to define whether two threads
381
    belong to one process.
381
    belong to one process.
382
  * The active window - window on top of the window stack -
382
  * The active window - window on top of the window stack -
383
    receives the messages on a keyboard input. For such window
383
    receives the messages on a keyboard input. For such window
384
    the position in the window stack coincides with returned value.
384
    the position in the window stack coincides with returned value.
385
  * Slot 1 corresponds to special system thread, for which:
385
  * Slot 1 corresponds to special system thread, for which:
386
    * the window is in the bottom of the window stack, the fields
386
    * the window is in the bottom of the window stack, the fields
387
      +4 and +6 contain value 1
387
      +4 and +6 contain value 1
388
    * name of the process - "OS/IDLE" (supplemented by spaces)
388
    * name of the process - "OS/IDLE" (supplemented by spaces)
389
    * address of the process in memory is 0, size of used memory is
389
    * address of the process in memory is 0, size of used memory is
390
      16 Mb (0x1000000)
390
      16 Mb (0x1000000)
391
    * PID=1
391
    * PID=1
392
    * coordinates and sizes of the window and the client area are by
392
    * coordinates and sizes of the window and the client area are by
393
      convention set to 0
393
      convention set to 0
394
    * status of the slot is always 0 (running)
394
    * status of the slot is always 0 (running)
395
    * the execution time adds of time leaving on operations itself
395
    * the execution time adds of time leaving on operations itself
396
      and idle time in waiting for interrupt (which can be got by call
396
      and idle time in waiting for interrupt (which can be got by call
397
      to subfunction 4 of function 18).
397
      to subfunction 4 of function 18).
398
  * Beginning from slot 2, the normal applications are placed.
398
  * Beginning from slot 2, the normal applications are placed.
399
  * The normal applications are placed in memory at the address
399
  * The normal applications are placed in memory at the address
400
    0 (kernel constant 'std_application_base_address').
400
    0 (kernel constant 'std_application_base_address').
401
    There is no intersection, as each process has its own page table.
401
    There is no intersection, as each process has its own page table.
402
  * At creation of the thread it is assigned the slot
402
  * At creation of the thread it is assigned the slot
403
    in the system table and identifier (Process/Thread IDentifier =
403
    in the system table and identifier (Process/Thread IDentifier =
404
    PID/TID), which do not vary with time for given thread.
404
    PID/TID), which do not vary with time for given thread.
405
    After completion of the thread its slot can be anew used
405
    After completion of the thread its slot can be anew used
406
    for another thread. The thread identifier can not be assigned
406
    for another thread. The thread identifier can not be assigned
407
    to other thread even after completion of this thread.
407
    to other thread even after completion of this thread.
408
    Identifiers, assigned to new threads, grow monotonously.
408
    Identifiers, assigned to new threads, grow monotonously.
409
  * If the thread has not yet defined the window by call to
409
  * If the thread has not yet defined the window by call to
410
    function 0, the position and the sizes
410
    function 0, the position and the sizes
411
    of its window are considered to be zero.
411
    of its window are considered to be zero.
412
  * Coordinates of the client area are relative to the window.
412
  * Coordinates of the client area are relative to the window.
413
  * At the moment only the part of the buffer by a size
413
  * At the moment only the part of the buffer by a size
414
    71 = 0x37 bytes is used. Nevertheless it is recommended to use
414
    71 = 0x37 bytes is used. Nevertheless it is recommended to use
415
    1-Kb buffer for the future compatibility, in the future
415
    1-Kb buffer for the future compatibility, in the future
416
    some fields can be added.
416
    some fields can be added.
417
 
417
 
418
======================================================================
418
======================================================================
419
==================== Function 10 - wait for event. ===================
419
==================== Function 10 - wait for event. ===================
420
======================================================================
420
======================================================================
421
If the message queue is empty, waits for appearance of the message
421
If the message queue is empty, waits for appearance of the message
422
in queue. In this state thread does not consume CPU time.
422
in queue. In this state thread does not consume CPU time.
423
Then reads out the message from queue.
423
Then reads out the message from queue.
424
 
424
 
425
Parameters:
425
Parameters:
426
  * eax = 10 - function number
426
  * eax = 10 - function number
427
Returned value:
427
Returned value:
428
  * eax = event (see the list of events)
428
  * eax = event (see the list of events)
429
Remarks:
429
Remarks:
430
  * Those events are taken into account only which enter into
430
  * Those events are taken into account only which enter into
431
    a mask set by function 40. By default it is
431
    a mask set by function 40. By default it is
432
    redraw, key and button events.
432
    redraw, key and button events.
433
  * To check, whether there is a message in queue, use function 11.
433
  * To check, whether there is a message in queue, use function 11.
434
    To wait for no more than given time, use function 23.
434
    To wait for no more than given time, use function 23.
435
 
435
 
436
======================================================================
436
======================================================================
437
=============== Function 11 - check for event, no wait. ==============
437
=============== Function 11 - check for event, no wait. ==============
438
======================================================================
438
======================================================================
439
If the message queue contains event, function reads out
439
If the message queue contains event, function reads out
440
and return it. If the queue is empty, function returns 0.
440
and return it. If the queue is empty, function returns 0.
441
Parameters:
441
Parameters:
442
  * eax = 11 - function number
442
  * eax = 11 - function number
443
Returned value:
443
Returned value:
444
  * eax = 0 - message queue is empty
444
  * eax = 0 - message queue is empty
445
  * else eax = event (see the list of events)
445
  * else eax = event (see the list of events)
446
Remarks:
446
Remarks:
447
  * Those events are taken into account only, which enter into
447
  * Those events are taken into account only, which enter into
448
    a mask set by function 40. By default it is
448
    a mask set by function 40. By default it is
449
    redraw, key and button events.
449
    redraw, key and button events.
450
  * To wait for event, use function 10.
450
  * To wait for event, use function 10.
451
    To wait for no more than given time, use function 23.
451
    To wait for no more than given time, use function 23.
452
 
452
 
453
======================================================================
453
======================================================================
454
=============== Function 12 - begin/end window redraw. ===============
454
=============== Function 12 - begin/end window redraw. ===============
455
======================================================================
455
======================================================================
456
 
456
 
457
---------------- Subfunction 1 - begin window redraw. ----------------
457
---------------- Subfunction 1 - begin window redraw. ----------------
458
Parameters:
458
Parameters:
459
  * eax = 12 - function number
459
  * eax = 12 - function number
460
  * ebx = 1 - subfunction number
460
  * ebx = 1 - subfunction number
461
Returned value:
461
Returned value:
462
  * function does not return value
462
  * function does not return value
463
 
463
 
464
----------------- Subfunction 2 - end window redraw. -----------------
464
----------------- Subfunction 2 - end window redraw. -----------------
465
Parameters:
465
Parameters:
466
  * eax = 12 - function number
466
  * eax = 12 - function number
467
  * ebx = 2 - subfunction number
467
  * ebx = 2 - subfunction number
468
Returned value:
468
Returned value:
469
  * function does not return value
469
  * function does not return value
470
Remarks:
470
Remarks:
471
  * Subfunction 1 deletes all buttons defined with
471
  * Subfunction 1 deletes all buttons defined with
472
    function 8, they must be defined again.
472
    function 8, they must be defined again.
473
 
473
 
474
======================================================================
474
======================================================================
475
============ Function 13 - draw a rectangle in the window. ===========
475
============ Function 13 - draw a rectangle in the window. ===========
476
======================================================================
476
======================================================================
477
Parameters:
477
Parameters:
478
  * eax = 13 - function number
478
  * eax = 13 - function number
479
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
479
  * ebx = [coordinate on axis x]*65536 + [size on axis x]
480
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
480
  * ecx = [coordinate on axis y]*65536 + [size on axis y]
481
  * edx = color 0xRRGGBB or 0x80RRGGBB for gradient fill
481
  * edx = color 0xRRGGBB or 0x80RRGGBB for gradient fill
482
Returned value:
482
Returned value:
483
  * function does not return value
483
  * function does not return value
484
Remarks:
484
Remarks:
485
  * Coordinates are understood as coordinates of the left upper corner
485
  * Coordinates are understood as coordinates of the left upper corner
486
    of a rectangle relative to the window.
486
    of a rectangle relative to the window.
487
 
487
 
488
======================================================================
488
======================================================================
489
=================== Function 14 - get screen size. ===================
489
=================== Function 14 - get screen size. ===================
490
======================================================================
490
======================================================================
491
Parameters:
491
Parameters:
492
  * eax = 14 - function number
492
  * eax = 14 - function number
493
Returned value:
493
Returned value:
494
  * eax = [xsize]*65536 + [ysize], where
494
  * eax = [xsize]*65536 + [ysize], where
495
  * xsize = x-coordinate of the right lower corner of the screen =
495
  * xsize = x-coordinate of the right lower corner of the screen =
496
            horizontal size - 1
496
            horizontal size - 1
497
  * ysize = y-coordinate of the right lower corner of the screen =
497
  * ysize = y-coordinate of the right lower corner of the screen =
498
            vertical size - 1
498
            vertical size - 1
499
Remarks:
499
Remarks:
500
  * See also subfunction 5 of function 48 - get sizes of
500
  * See also subfunction 5 of function 48 - get sizes of
501
    working area of the screen.
501
    working area of the screen.
502
 
502
 
503
======================================================================
503
======================================================================
504
== Function 15, subfunction 1 - set a size of the background image. ==
504
== Function 15, subfunction 1 - set a size of the background image. ==
505
======================================================================
505
======================================================================
506
Parameters:
506
Parameters:
507
  * eax = 15 - function number
507
  * eax = 15 - function number
508
  * ebx = 1 - subfunction number
508
  * ebx = 1 - subfunction number
509
  * ecx = width of the image
509
  * ecx = width of the image
510
  * edx = height of the image
510
  * edx = height of the image
511
Returned value:
511
Returned value:
512
  * function does not return value
512
  * function does not return value
513
Remarks:
513
Remarks:
514
  * Before calling subfunctions 2 and 5 you should call this function
514
  * Before calling subfunctions 2 and 5 you should call this function
515
    to set image size!
515
    to set image size!
516
  * For update of the screen (after completion of a series of commands
516
  * For update of the screen (after completion of a series of commands
517
    working with a background) call subfunction 3.
517
    working with a background) call subfunction 3.
518
  * There is a pair function for get size of the background image -
518
  * There is a pair function for get size of the background image -
519
    subfunction 1 of function 39.
519
    subfunction 1 of function 39.
520
 
520
 
521
======================================================================
521
======================================================================
522
=== Function 15, subfunction 2 - put pixel on the background image. ==
522
=== Function 15, subfunction 2 - put pixel on the background image. ==
523
======================================================================
523
======================================================================
524
Parameters:
524
Parameters:
525
  * eax = 15 - function number
525
  * eax = 15 - function number
526
  * ebx = 2 - subfunction number
526
  * ebx = 2 - subfunction number
527
  * ecx = offset
527
  * ecx = offset
528
  * edx = color of a pixel 0xRRGGBB
528
  * edx = color of a pixel 0xRRGGBB
529
Returned value:
529
Returned value:
530
  * function does not return value
530
  * function does not return value
531
Remarks:
531
Remarks:
532
  * Offset for a pixel with coordinates (x,y) is calculated as
532
  * Offset for a pixel with coordinates (x,y) is calculated as
533
    (x+y*xsize)*3.
533
    (x+y*xsize)*3.
534
  * If the given offset exceeds size set by subfunction 1,
534
  * If the given offset exceeds size set by subfunction 1,
535
    the call is ignored.
535
    the call is ignored.
536
  * For update of the screen (after completion of a series of commands
536
  * For update of the screen (after completion of a series of commands
537
    working with a background) call subfunction 3.
537
    working with a background) call subfunction 3.
538
  * There is a pair function for get pixel on the background image -
538
  * There is a pair function for get pixel on the background image -
539
    subfunction 2 of function 39.
539
    subfunction 2 of function 39.
540
 
540
 
541
======================================================================
541
======================================================================
542
=========== Function 15, subfunction 3 - redraw background. ==========
542
=========== Function 15, subfunction 3 - redraw background. ==========
543
======================================================================
543
======================================================================
544
Parameters:
544
Parameters:
545
  * eax = 15 - function number
545
  * eax = 15 - function number
546
  * ebx = 3 - subfunction number
546
  * ebx = 3 - subfunction number
547
Returned value:
547
Returned value:
548
  * function does not return value
548
  * function does not return value
549
 
549
 
550
======================================================================
550
======================================================================
551
== Function 15, subfunction 4 - set drawing mode for the background. =
551
== Function 15, subfunction 4 - set drawing mode for the background. =
552
======================================================================
552
======================================================================
553
Parameters:
553
Parameters:
554
  * eax = 15 - function number
554
  * eax = 15 - function number
555
  * ebx = 4 - subfunction number
555
  * ebx = 4 - subfunction number
556
  * ecx = drawing mode:
556
  * ecx = drawing mode:
557
    * 1 = tile
557
    * 1 = tile
558
    * 2 = stretch
558
    * 2 = stretch
559
Returned value:
559
Returned value:
560
  * function does not return value
560
  * function does not return value
561
Remarks:
561
Remarks:
562
  * For update of the screen (after completion of a series of commands
562
  * For update of the screen (after completion of a series of commands
563
    working with a background) call subfunction 3.
563
    working with a background) call subfunction 3.
564
  * There is a pair function for get drawing mode of the background -
564
  * There is a pair function for get drawing mode of the background -
565
    subfunction 4 of function 39.
565
    subfunction 4 of function 39.
566
 
566
 
567
======================================================================
567
======================================================================
568
===================== Function 15, subfunction 5 =====================
568
===================== Function 15, subfunction 5 =====================
569
============ Put block of pixels on the background image. ============
569
============ Put block of pixels on the background image. ============
570
======================================================================
570
======================================================================
571
Parameters:
571
Parameters:
572
  * eax = 15 - function number
572
  * eax = 15 - function number
573
  * ebx = 5 - subfunction number
573
  * ebx = 5 - subfunction number
574
  * ecx = pointer to the data in the format BBGGRRBBGGRR...
574
  * ecx = pointer to the data in the format BBGGRRBBGGRR...
575
  * edx = offset in data of the background image
575
  * edx = offset in data of the background image
576
  * esi = size of data in bytes = 3 * number of pixels
576
  * esi = size of data in bytes = 3 * number of pixels
577
Returned value:
577
Returned value:
578
  * function does not return value
578
  * function does not return value
579
Remarks:
579
Remarks:
580
  * Offset and size are not checked for correctness.
580
  * Offset and size are not checked for correctness.
581
  * Color of each pixel is stored as 3-bytes value BBGGRR.
581
  * Color of each pixel is stored as 3-bytes value BBGGRR.
582
  * Pixels of the background image are written sequentially
582
  * Pixels of the background image are written sequentially
583
    from left to right, from up to down.
583
    from left to right, from up to down.
584
  * Offset of pixel with coordinates (x,y) is (x+y*xsize)*3.
584
  * Offset of pixel with coordinates (x,y) is (x+y*xsize)*3.
585
  * For update of the screen (after completion of a series of commands
585
  * For update of the screen (after completion of a series of commands
586
    working with a background) call subfunction 3.
586
    working with a background) call subfunction 3.
587
 
587
 
588
======================================================================
588
======================================================================
589
===================== Function 15, subfunction 6 =====================
589
===================== Function 15, subfunction 6 =====================
590
======== Map background data to the address space of process. ========
590
======== Map background data to the address space of process. ========
591
======================================================================
591
======================================================================
592
Parameters:
592
Parameters:
593
  * eax = 15 - function number
593
  * eax = 15 - function number
594
  * ebx = 6 - subfunction number
594
  * ebx = 6 - subfunction number
595
Returned value:
595
Returned value:
596
  * eax = pointer to background data, 0 if error
596
  * eax = pointer to background data, 0 if error
597
Remarks:
597
Remarks:
598
  * Mapped data are available for read and write.
598
  * Mapped data are available for read and write.
599
  * Size of background data is 3*xsize*ysize. The system blocks
599
  * Size of background data is 3*xsize*ysize. The system blocks
600
    changes of background sizes while process works with mapped data.
600
    changes of background sizes while process works with mapped data.
601
  * Color of each pixel is stored as 3-bytes value BBGGRR.
601
  * Color of each pixel is stored as 3-bytes value BBGGRR.
602
  * Pixels of the background image are written sequentially
602
  * Pixels of the background image are written sequentially
603
    from left to right, from up to down.
603
    from left to right, from up to down.
604
 
604
 
605
======================================================================
605
======================================================================
606
===== Function 15, subfunction 7 - close mapped background data. =====
606
===== Function 15, subfunction 7 - close mapped background data. =====
607
======================================================================
607
======================================================================
608
Parameters:
608
Parameters:
609
  * eax = 15 - function number
609
  * eax = 15 - function number
610
  * ebx = 7 - subfunction number
610
  * ebx = 7 - subfunction number
611
  * ecx = pointer to mapped data
611
  * ecx = pointer to mapped data
612
Returned value:
612
Returned value:
613
  * eax = 1 - success, 0 - error
613
  * eax = 1 - success, 0 - error
614
 
614
 
615
======================================================================
615
======================================================================
616
===================== Function 15, subfunction 8 =====================
616
===================== Function 15, subfunction 8 =====================
617
============= Get coordinates of last draw the background ============
617
============= Get coordinates of last draw the background ============
618
======================================================================
618
======================================================================
619
Parameters:
619
Parameters:
620
  * eax = 15 - function number
620
  * eax = 15 - function number
621
  * ebx = 8 - subfunction number
621
  * ebx = 8 - subfunction number
622
Returned value:
622
Returned value:
623
  * eax = [left]*65536 + [right]
623
  * eax = [left]*65536 + [right]
624
  * ebx = [top]*65536 + [bottom]
624
  * ebx = [top]*65536 + [bottom]
625
Remarks:
625
Remarks:
626
  * (left,top) are coordinates of the left upper corner,
626
  * (left,top) are coordinates of the left upper corner,
627
    (right,bottom) are coordinates of the right lower one.
627
    (right,bottom) are coordinates of the right lower one.
628
  * For receiving more reliable information, call the function
628
  * For receiving more reliable information, call the function
629
    immediately after the event:
629
    immediately after the event:
630
             5 = kernel finished redrawing of the desktop background
630
             5 = kernel finished redrawing of the desktop background
631
 
631
 
632
======================================================================
632
======================================================================
633
===================== Function 15, subfunction 9 =====================
633
===================== Function 15, subfunction 9 =====================
634
============= Redraws a rectangular part of the background ===========
634
============= Redraws a rectangular part of the background ===========
635
======================================================================
635
======================================================================
636
Parameters:
636
Parameters:
637
  * eax = 15 - function number
637
  * eax = 15 - function number
638
  * ebx = 9 - subfunction number
638
  * ebx = 9 - subfunction number
639
  * ecx = [left]*65536 + [right]
639
  * ecx = [left]*65536 + [right]
640
  * edx = [top]*65536 + [bottom]
640
  * edx = [top]*65536 + [bottom]
641
Returned value:
641
Returned value:
642
  * function does not return value
642
  * function does not return value
643
Remarks:
643
Remarks:
644
  * (left,top) are coordinates of the left upper corner,
644
  * (left,top) are coordinates of the left upper corner,
645
    (right,bottom) are coordinates of the right lower one.
645
    (right,bottom) are coordinates of the right lower one.
646
  * If parameters are set incorrectly then background is not redrawn.
646
  * If parameters are set incorrectly then background is not redrawn.
647
 
647
 
648
======================================================================
648
======================================================================
649
=============== Function 16 - save ramdisk on a floppy. ==============
649
=============== Function 16 - save ramdisk on a floppy. ==============
650
======================================================================
650
======================================================================
651
Parameters:
651
Parameters:
652
  * eax = 16 - function number
652
  * eax = 16 - function number
653
  * ebx = 1 or ebx = 2 - on which floppy save
653
  * ebx = 1 or ebx = 2 - on which floppy save
654
Returned value:
654
Returned value:
655
  * eax = 0 - success
655
  * eax = 0 - success
656
  * eax = 1 - error
656
  * eax = 1 - error
657
 
657
 
658
======================================================================
658
======================================================================
659
======= Function 17 - get the identifier of the pressed button. ======
659
======= Function 17 - get the identifier of the pressed button. ======
660
======================================================================
660
======================================================================
661
Takes away the code of the pressed button from the buffer.
661
Takes away the code of the pressed button from the buffer.
662
Parameters:
662
Parameters:
663
  * eax = 17 - function number
663
  * eax = 17 - function number
664
Returned value:
664
Returned value:
665
  * if the buffer is empty, function returns eax=1
665
  * if the buffer is empty, function returns eax=1
666
  * if the buffer is not empty:
666
  * if the buffer is not empty:
667
    * high 24 bits of eax contain button identifier (in particular,
667
    * high 24 bits of eax contain button identifier (in particular,
668
      ah contains low byte of the identifier; if all buttons have
668
      ah contains low byte of the identifier; if all buttons have
669
      the identifier less than 256, ah is enough to distinguish)
669
      the identifier less than 256, ah is enough to distinguish)
670
    * al = 0 - the button was pressed with left mouse button
670
    * al = 0 - the button was pressed with left mouse button
671
    * al = bit corresponding to used mouse button otherwise
671
    * al = bit corresponding to used mouse button otherwise
672
Remarks:
672
Remarks:
673
  * "Buffer" keeps only one button, at pressing the new button the
673
  * "Buffer" keeps only one button, at pressing the new button the
674
    information about old is lost.
674
    information about old is lost.
675
  * The call of this function by an application with inactive window
675
  * The call of this function by an application with inactive window
676
    will return answer "buffer is empty".
676
    will return answer "buffer is empty".
677
  * Returned value for al corresponds to the state of mouse buttons
677
  * Returned value for al corresponds to the state of mouse buttons
678
    as in subfunction 2 of function 37 at the beginning
678
    as in subfunction 2 of function 37 at the beginning
679
    of button press, excluding lower bit, which is cleared.
679
    of button press, excluding lower bit, which is cleared.
680
 
680
 
681
======================================================================
681
======================================================================
682
===================== Function 18, subfunction 1 =====================
682
===================== Function 18, subfunction 1 =====================
683
============= Make deactive the window of the given thread. ==========
683
============= Make deactive the window of the given thread. ==========
684
======================================================================
684
======================================================================
685
Parameters:
685
Parameters:
686
  * eax = 18 - function number
686
  * eax = 18 - function number
687
  * ebx = 1 - subfunction number
687
  * ebx = 1 - subfunction number
688
  * ecx = number of the thread slot
688
  * ecx = number of the thread slot
689
Returned value:
689
Returned value:
690
  * function does not return value
690
  * function does not return value
691
 
691
 
692
======================================================================
692
======================================================================
693
= Function 18, subfunction 2 - terminate process/thread by the slot. =
693
= Function 18, subfunction 2 - terminate process/thread by the slot. =
694
======================================================================
694
======================================================================
695
Parameters:
695
Parameters:
696
  * eax = 18 - function number
696
  * eax = 18 - function number
697
  * ebx = 2 - subfunction number
697
  * ebx = 2 - subfunction number
698
  * ecx = number of the slot of process/thread
698
  * ecx = number of the slot of process/thread
699
Returned value:
699
Returned value:
700
  * function does not return value
700
  * function does not return value
701
Remarks:
701
Remarks:
702
  * It is impossible to terminate system thread OS/IDLE (with
702
  * It is impossible to terminate system thread OS/IDLE (with
703
    number of the slot 1),
703
    number of the slot 1),
704
    it is possible to terminate any normal process/thread.
704
    it is possible to terminate any normal process/thread.
705
  * See also subfunction 18 - terminate
705
  * See also subfunction 18 - terminate
706
    process/thread by the identifier.
706
    process/thread by the identifier.
707
 
707
 
708
======================================================================
708
======================================================================
709
===================== Function 18, subfunction 3 =====================
709
===================== Function 18, subfunction 3 =====================
710
============= Make active the window of the given thread. ============
710
============= Make active the window of the given thread. ============
711
======================================================================
711
======================================================================
712
Parameters:
712
Parameters:
713
  * eax = 18 - function number
713
  * eax = 18 - function number
714
  * ebx = 3 - subfunction number
714
  * ebx = 3 - subfunction number
715
  * ecx = number of the thread slot
715
  * ecx = number of the thread slot
716
Returned value:
716
Returned value:
717
  * function does not return value
717
  * function does not return value
718
Remarks:
718
Remarks:
719
  * If correct, but nonexistent slot is given,
719
  * If correct, but nonexistent slot is given,
720
    some window is made active.
720
    some window is made active.
721
  * To find out, which window is active, use subfunction 7.
721
  * To find out, which window is active, use subfunction 7.
722
 
722
 
723
======================================================================
723
======================================================================
724
===================== Function 18, subfunction 4 =====================
724
===================== Function 18, subfunction 4 =====================
725
=========== Get counter of idle time units per one second. ===========
725
=========== Get counter of idle time units per one second. ===========
726
======================================================================
726
======================================================================
727
Idle time units are units, in which the processor stands idle
727
Idle time units are units, in which the processor stands idle
728
in waiting for interrupt (in the command 'hlt').
728
in waiting for interrupt (in the command 'hlt').
729
 
729
 
730
Parameters:
730
Parameters:
731
  * eax = 18 - function number
731
  * eax = 18 - function number
732
  * ebx = 4 - subfunction number
732
  * ebx = 4 - subfunction number
733
Returned value:
733
Returned value:
734
  * eax = value of the counter of idle time units per one second
734
  * eax = value of the counter of idle time units per one second
735
 
735
 
736
======================================================================
736
======================================================================
737
========== Function 18, subfunction 5 - get CPU clock rate. ==========
737
========== Function 18, subfunction 5 - get CPU clock rate. ==========
738
======================================================================
738
======================================================================
739
Parameters:
739
Parameters:
740
  * eax = 18 - function number
740
  * eax = 18 - function number
741
  * ebx = 5 - subfunction number
741
  * ebx = 5 - subfunction number
742
Returned value:
742
Returned value:
743
  * eax = clock rate (modulo 2^32 clock ticks = 4GHz)
743
  * eax = clock rate (modulo 2^32 clock ticks = 4GHz)
744
 
744
 
745
======================================================================
745
======================================================================
746
 Function 18, subfunction 6 - save ramdisk to the file on hard drive.
746
 Function 18, subfunction 6 - save ramdisk to the file on hard drive.
747
======================================================================
747
======================================================================
748
Parameters:
748
Parameters:
749
  * eax = 18 - function number
749
  * eax = 18 - function number
750
  * ebx = 6 - subfunction number
750
  * ebx = 6 - subfunction number
751
  * ecx = pointer to the full path to file
751
  * ecx = pointer to the full path to file
752
    (for example, "/hd0/1/kolibri/kolibri.img")
752
    (for example, "/hd0/1/kolibri/kolibri.img")
753
Returned value:
753
Returned value:
754
  * eax = 0 - success
754
  * eax = 0 - success
755
  * else eax = error code of the file system
755
  * else eax = error code of the file system
756
Remarks:
756
Remarks:
757
  * All folders in the given path must exist, otherwise function
757
  * All folders in the given path must exist, otherwise function
758
    returns value 5, "file not found".
758
    returns value 5, "file not found".
759
 
759
 
760
======================================================================
760
======================================================================
761
=========== Function 18, subfunction 7 - get active window. ==========
761
=========== Function 18, subfunction 7 - get active window. ==========
762
======================================================================
762
======================================================================
763
Parameters:
763
Parameters:
764
  * eax = 18 - function number
764
  * eax = 18 - function number
765
  * ebx = 7 - subfunction number
765
  * ebx = 7 - subfunction number
766
Returned value:
766
Returned value:
767
  * eax = number of the active window
767
  * eax = number of the active window
768
    (number of the slot of the thread with active window)
768
    (number of the slot of the thread with active window)
769
Remarks:
769
Remarks:
770
  * Active window is at the top of the window stack and receives
770
  * Active window is at the top of the window stack and receives
771
    messages on all keyboard input.
771
    messages on all keyboard input.
772
  * To make a window active, use subfunction 3.
772
  * To make a window active, use subfunction 3.
773
 
773
 
774
======================================================================
774
======================================================================
775
== Function 18, subfunction 8 - disable/enable the internal speaker. =
775
== Function 18, subfunction 8 - disable/enable the internal speaker. =
776
======================================================================
776
======================================================================
777
If speaker sound is disabled, all calls to subfunction 55 of
777
If speaker sound is disabled, all calls to subfunction 55 of
778
function 55 are ignored. If speaker sound is enabled,
778
function 55 are ignored. If speaker sound is enabled,
779
they are routed on builtin speaker.
779
they are routed on builtin speaker.
780
 
780
 
781
------------------- Subsubfunction 1 - get status. -------------------
781
------------------- Subsubfunction 1 - get status. -------------------
782
Parameters:
782
Parameters:
783
  * eax = 18 - function number
783
  * eax = 18 - function number
784
  * ebx = 8 - subfunction number
784
  * ebx = 8 - subfunction number
785
  * ecx = 1 - number of the subsubfunction
785
  * ecx = 1 - number of the subsubfunction
786
Returned value:
786
Returned value:
787
  * eax = 0 - speaker sound is enabled; 1 - disabled
787
  * eax = 0 - speaker sound is enabled; 1 - disabled
788
 
788
 
789
----------------- Subsubfunction 2 - toggle status. ------------------
789
----------------- Subsubfunction 2 - toggle status. ------------------
790
Toggles states of disable/enable.
790
Toggles states of disable/enable.
791
Parameters:
791
Parameters:
792
  * eax = 18 - function number
792
  * eax = 18 - function number
793
  * ebx = 8 - subfunction number
793
  * ebx = 8 - subfunction number
794
  * ecx = 2 - number of the subsubfunction
794
  * ecx = 2 - number of the subsubfunction
795
Returned value:
795
Returned value:
796
  * function does not return value
796
  * function does not return value
797
 
797
 
798
======================================================================
798
======================================================================
799
== Function 18, subfunction 9 - system shutdown with the parameter. ==
799
== Function 18, subfunction 9 - system shutdown with the parameter. ==
800
======================================================================
800
======================================================================
801
Parameters:
801
Parameters:
802
  * eax = 18 - function number
802
  * eax = 18 - function number
803
  * ebx = 9 - subfunction number
803
  * ebx = 9 - subfunction number
804
  * ecx = parameter:
804
  * ecx = parameter:
805
    * 2 = turn off computer
805
    * 2 = turn off computer
806
    * 3 = reboot computer
806
    * 3 = reboot computer
807
    * 4 = restart the kernel from the file 'kernel.mnt' on ramdisk
807
    * 4 = restart the kernel from the file 'kernel.mnt' on ramdisk
808
Returned value:
808
Returned value:
809
  * at incorrect ecx the registers do not change (i.e. eax=18)
809
  * at incorrect ecx the registers do not change (i.e. eax=18)
810
  * by correct call function always returns eax=0
810
  * by correct call function always returns eax=0
811
    as the tag of success
811
    as the tag of success
812
Remarks:
812
Remarks:
813
  * Do not rely on returned value by incorrect call, it can be
813
  * Do not rely on returned value by incorrect call, it can be
814
    changed in future versions of the kernel.
814
    changed in future versions of the kernel.
815
 
815
 
816
======================================================================
816
======================================================================
817
===== Function 18, subfunction 10 - minimize application window. =====
817
===== Function 18, subfunction 10 - minimize application window. =====
818
======================================================================
818
======================================================================
819
Minimizes the own window.
819
Minimizes the own window.
820
Parameters:
820
Parameters:
821
  * eax = 18 - function number
821
  * eax = 18 - function number
822
  * ebx = 10 - subfunction number
822
  * ebx = 10 - subfunction number
823
Returned value:
823
Returned value:
824
  * function does not return value
824
  * function does not return value
825
Remarks:
825
Remarks:
826
  * The minimized window from the point of view of function 9
826
  * The minimized window from the point of view of function 9
827
    keeps position and sizes.
827
    keeps position and sizes.
828
  * Restoring of an application window occurs at its activation by
828
  * Restoring of an application window occurs at its activation by
829
    subfunction 3.
829
    subfunction 3.
830
  * Usually there is no necessity to minimize/restire a window
830
  * Usually there is no necessity to minimize/restire a window
831
    obviously: minimization of a window is carried out by the system
831
    obviously: minimization of a window is carried out by the system
832
    at pressing the minimization button (for skinned windows
832
    at pressing the minimization button (for skinned windows
833
    it is defined automatically by function 0,
833
    it is defined automatically by function 0,
834
    for other windows it can be defined manually by function 8),
834
    for other windows it can be defined manually by function 8),
835
    restore of a window is done by the application '@panel'.
835
    restore of a window is done by the application '@panel'.
836
 
836
 
837
======================================================================
837
======================================================================
838
 Function 18, subfunction 11 - get information on the disk subsystem.
838
 Function 18, subfunction 11 - get information on the disk subsystem.
839
======================================================================
839
======================================================================
840
Parameters:
840
Parameters:
841
  * eax = 18 - function number
841
  * eax = 18 - function number
842
  * ebx = 11 - subfunction number
842
  * ebx = 11 - subfunction number
843
  * ecx = type of the table:
843
  * ecx = type of the table:
844
    * 1 = short version, 10 bytes
844
    * 1 = short version, 10 bytes
845
    * 2 = full version, 65536 bytes
845
    * 2 = full version, 65536 bytes
846
  * edx = pointer to the buffer (in the application) for the table
846
  * edx = pointer to the buffer (in the application) for the table
847
Returned value:
847
Returned value:
848
  * function does not return value
848
  * function does not return value
849
Format of the table: short version:
849
Format of the table: short version:
850
  * +0: byte: information about FDD's (drives for floppies),
850
  * +0: byte: information about FDD's (drives for floppies),
851
    AAAABBBB, where AAAA gives type of the first drive, BBBB -
851
    AAAABBBB, where AAAA gives type of the first drive, BBBB -
852
    of the second regarding to the following list:
852
    of the second regarding to the following list:
853
    * 0 = there is no drive
853
    * 0 = there is no drive
854
    * 1 = 360Kb, 5.25''
854
    * 1 = 360Kb, 5.25''
855
    * 2 = 1.2Mb, 5.25''
855
    * 2 = 1.2Mb, 5.25''
856
    * 3 = 720Kb, 3.5''
856
    * 3 = 720Kb, 3.5''
857
    * 4 = 1.44Mb, 3.5''
857
    * 4 = 1.44Mb, 3.5''
858
    * 5 = 2.88Mb, 3.5'' (such drives are not used anymore)
858
    * 5 = 2.88Mb, 3.5'' (such drives are not used anymore)
859
    For example, for the standard configuration from one 1.44-drive
859
    For example, for the standard configuration from one 1.44-drive
860
    here will be 40h, and for the case 1.2Mb on A: and 1.44Mb on B:
860
    here will be 40h, and for the case 1.2Mb on A: and 1.44Mb on B:
861
    the value is 24h.
861
    the value is 24h.
862
  * +1: byte: information about hard disks and CD-drives, AABBCCDD,
862
  * +1: byte: information about hard disks and CD-drives, AABBCCDD,
863
    where AA corresponds to the controller IDE0, ..., DD - IDE3:
863
    where AA corresponds to the controller IDE0, ..., DD - IDE3:
864
    * 0 = device is absent
864
    * 0 = device is absent
865
    * 1 = hard drive
865
    * 1 = hard drive
866
    * 2 = CD-drive
866
    * 2 = CD-drive
867
    For example, in the case HD on IDE0 and CD on IDE2
867
    For example, in the case HD on IDE0 and CD on IDE2
868
    this field contains 48h.
868
    this field contains 48h.
869
  * +2: 4 db: number of the retrieved partitions on hard disks
869
  * +2: 4 db: number of the retrieved partitions on hard disks
870
    at accordingly IDE0,...,IDE3.
870
    at accordingly IDE0,...,IDE3.
871
    If the hard disk on IDEx is absent, appropriate byte is zero,
871
    If the hard disk on IDEx is absent, appropriate byte is zero,
872
    otherwise it shows number of the recognized partitions, which
872
    otherwise it shows number of the recognized partitions, which
873
    can be not presented (if the drive is not formatted or if
873
    can be not presented (if the drive is not formatted or if
874
    the file system is not supported). Current version of the kernel
874
    the file system is not supported). Current version of the kernel
875
    supports only FAT16, FAT32 and NTFS for hard disks.
875
    supports only FAT16, FAT32 and NTFS for hard disks.
876
  * +6: 4 db: reserved
876
  * +6: 4 db: reserved
877
Format of the table: full version:
877
Format of the table: full version:
878
  * +0: 10 db: same as for the short version
878
  * +0: 10 db: same as for the short version
879
  * +10: 100 db: data for the first partition
879
  * +10: 100 db: data for the first partition
880
  * +110: 100 db: data for the second partition
880
  * +110: 100 db: data for the second partition
881
  * ...
881
  * ...
882
  * +10+100*(n-1): 100 db: data for the last partition
882
  * +10+100*(n-1): 100 db: data for the last partition
883
The partitions are located as follows: at first sequentially all
883
The partitions are located as follows: at first sequentially all
884
recoginzed partitions on HD on IDE0 (if present),
884
recoginzed partitions on HD on IDE0 (if present),
885
then on HD on IDE1 (if present) and so on up to IDE3.
885
then on HD on IDE1 (if present) and so on up to IDE3.
886
Format of the information about partition
886
Format of the information about partition
887
(at moment only FAT is supported):
887
(at moment only FAT is supported):
888
  * +0: dword: first physical sector of the partition
888
  * +0: dword: first physical sector of the partition
889
  * +4: dword: last physical sector of the partition
889
  * +4: dword: last physical sector of the partition
890
    (belongs to the partition)
890
    (belongs to the partition)
891
  * +8: byte: file system type:
891
  * +8: byte: file system type:
892
    16=FAT16, 32=FAT32, 1=NTFS
892
    16=FAT16, 32=FAT32, 1=NTFS
893
  * other data are dependent on file system, are modified with
893
  * other data are dependent on file system, are modified with
894
    kernel modifications and therefore are not described
894
    kernel modifications and therefore are not described
895
Remarks:
895
Remarks:
896
  * The short table can be used for obtaining the information about
896
  * The short table can be used for obtaining the information about
897
    available devices.
897
    available devices.
898
 
898
 
899
======================================================================
899
======================================================================
900
========== Function 18, subfunction 13 - get kernel version. =========
900
========== Function 18, subfunction 13 - get kernel version. =========
901
======================================================================
901
======================================================================
902
Parameters:
902
Parameters:
903
  * eax = 18 - function number
903
  * eax = 18 - function number
904
  * ebx = 13 - subfunction number
904
  * ebx = 13 - subfunction number
905
  * ecx = pointer to the buffer (not less than 16 bytes), where
905
  * ecx = pointer to the buffer (not less than 16 bytes), where
906
    the information will be placed
906
    the information will be placed
907
Returned value:
907
Returned value:
908
  * function does not return value
908
  * function does not return value
909
Structure of the buffer:
909
Structure of the buffer:
910
db a,b,c,d for version a.b.c.d
910
db a,b,c,d for version a.b.c.d
911
db 0: reserved
911
db 0: reserved
912
dd REV - kernel SVN revision number
912
dd REV - kernel SVN revision number
913
For Kolibri 0.7.7.0+ kernel:
913
For Kolibri 0.7.7.0+ kernel:
914
db 0,7,7,0
914
db 0,7,7,0
915
db 0
915
db 0
916
dd 1675
916
dd 1675
917
 
917
 
918
======================================================================
918
======================================================================
919
======= Function 18, subfunction 14 - wait for screen retrace. =======
919
======= Function 18, subfunction 14 - wait for screen retrace. =======
920
======================================================================
920
======================================================================
921
Waits for the beginning of retrace of the scanning ray of the screen
921
Waits for the beginning of retrace of the scanning ray of the screen
922
monitor.
922
monitor.
923
Parameters:
923
Parameters:
924
  * eax = 18 - function number
924
  * eax = 18 - function number
925
  * ebx = 14 - subfunction number
925
  * ebx = 14 - subfunction number
926
Returned value:
926
Returned value:
927
  * eax = 0 as the tag of success
927
  * eax = 0 as the tag of success
928
Remarks:
928
Remarks:
929
  * Function is intended only for active high-efficiency graphics
929
  * Function is intended only for active high-efficiency graphics
930
    applications; is used for smooth output of a graphics.
930
    applications; is used for smooth output of a graphics.
931
 
931
 
932
======================================================================
932
======================================================================
933
== Function 18, subfunction 15 - center mouse cursor on the screen. ==
933
== Function 18, subfunction 15 - center mouse cursor on the screen. ==
934
======================================================================
934
======================================================================
935
Parameters:
935
Parameters:
936
  * eax = 18 - function number
936
  * eax = 18 - function number
937
  * ebx = 15 - subfunction number
937
  * ebx = 15 - subfunction number
938
Returned value:
938
Returned value:
939
  * eax = 0 as the tag of success
939
  * eax = 0 as the tag of success
940
 
940
 
941
======================================================================
941
======================================================================
942
========= Function 18, subfunction 16 - get size of free RAM. ========
942
========= Function 18, subfunction 16 - get size of free RAM. ========
943
======================================================================
943
======================================================================
944
Parameters:
944
Parameters:
945
  * eax = 18 - function number
945
  * eax = 18 - function number
946
  * ebx = 16 - subfunction number
946
  * ebx = 16 - subfunction number
947
Returned value:
947
Returned value:
948
  * eax = size of free memory in kilobytes
948
  * eax = size of free memory in kilobytes
949
 
949
 
950
======================================================================
950
======================================================================
951
======== Function 18, subfunction 17 - get full amount of RAM. =======
951
======== Function 18, subfunction 17 - get full amount of RAM. =======
952
======================================================================
952
======================================================================
953
Parameters:
953
Parameters:
954
  * eax = 18 - function number
954
  * eax = 18 - function number
955
  * ebx = 17 - subfunction number
955
  * ebx = 17 - subfunction number
956
Returned value:
956
Returned value:
957
  * eax = total size of existing memory in kilobytes
957
  * eax = total size of existing memory in kilobytes
958
 
958
 
959
======================================================================
959
======================================================================
960
===================== Function 18, subfunction 18 ====================
960
===================== Function 18, subfunction 18 ====================
961
============= Terminate process/thread by the identifier. ============
961
============= Terminate process/thread by the identifier. ============
962
======================================================================
962
======================================================================
963
Parameters:
963
Parameters:
964
  * eax = 18 - function number
964
  * eax = 18 - function number
965
  * ebx = 18 - subfunction number
965
  * ebx = 18 - subfunction number
966
  * ecx = identifer of process/thread (PID/TID)
966
  * ecx = identifer of process/thread (PID/TID)
967
Returned value:
967
Returned value:
968
  * eax = 0 - success
968
  * eax = 0 - success
969
  * eax = -1 - error (process is not found or is system)
969
  * eax = -1 - error (process is not found or is system)
970
Remarks:
970
Remarks:
971
  * It is impossible to terminate system thread OS/IDLE (identifier
971
  * It is impossible to terminate system thread OS/IDLE (identifier
972
    1), it is possible to terminate any normal process/thread.
972
    1), it is possible to terminate any normal process/thread.
973
  * See also subfunction 2 - terminate
973
  * See also subfunction 2 - terminate
974
    process/thread by given slot.
974
    process/thread by given slot.
975
 
975
 
976
======================================================================
976
======================================================================
977
======== Function 18, subfunction 19 - get/set mouse features. =======
977
======== Function 18, subfunction 19 - get/set mouse features. =======
978
======================================================================
978
======================================================================
979
 
979
 
980
---------------- Subsubfunction 0 - get mouse speed. -----------------
980
---------------- Subsubfunction 0 - get mouse speed. -----------------
981
Parameters:
981
Parameters:
982
  * eax = 18 - function number
982
  * eax = 18 - function number
983
  * ebx = 19 - subfunction number
983
  * ebx = 19 - subfunction number
984
  * ecx = 0 - subsubfunction number
984
  * ecx = 0 - subsubfunction number
985
Returned value:
985
Returned value:
986
  * eax = current mouse speed
986
  * eax = current mouse speed
987
 
987
 
988
---------------- Subsubfunction 1 - set mouse speed. -----------------
988
---------------- Subsubfunction 1 - set mouse speed. -----------------
989
Parameters:
989
Parameters:
990
  * eax = 18 - function number
990
  * eax = 18 - function number
991
  * ebx = 19 - subfunction number
991
  * ebx = 19 - subfunction number
992
  * ecx = 1 - subsubfunction number
992
  * ecx = 1 - subsubfunction number
993
  * edx = new value for speed
993
  * edx = new value for speed
994
Returned value:
994
Returned value:
995
  * function does not return value
995
  * function does not return value
996
 
996
 
997
---------------- Subsubfunction 2 - get mouse delay. -----------------
997
---------------- Subsubfunction 2 - get mouse delay. -----------------
998
Parameters:
998
Parameters:
999
  * eax = 18 - function number
999
  * eax = 18 - function number
1000
  * ebx = 19 - subfunction number
1000
  * ebx = 19 - subfunction number
1001
  * ecx = 2 - subsubfunction number
1001
  * ecx = 2 - subsubfunction number
1002
Returned value:
1002
Returned value:
1003
  * eax = current mouse delay
1003
  * eax = current mouse delay
1004
 
1004
 
1005
---------------- Subsubfunction 3 - set mouse delay. -----------------
1005
---------------- Subsubfunction 3 - set mouse delay. -----------------
1006
Parameters:
1006
Parameters:
1007
  * eax = 18 - function number
1007
  * eax = 18 - function number
1008
  * ebx = 19 - subfunction number
1008
  * ebx = 19 - subfunction number
1009
  * ecx = 3 - subsubfunction number
1009
  * ecx = 3 - subsubfunction number
1010
  * edx = new value for mouse delay
1010
  * edx = new value for mouse delay
1011
Returned value:
1011
Returned value:
1012
  * function does not return value
1012
  * function does not return value
1013
 
1013
 
1014
----------- Subsubfunction 4 - set mouse pointer position. -----------
1014
----------- Subsubfunction 4 - set mouse pointer position. -----------
1015
Parameters:
1015
Parameters:
1016
  * eax = 18 - function number
1016
  * eax = 18 - function number
1017
  * ebx = 19 - subfunction number
1017
  * ebx = 19 - subfunction number
1018
  * ecx = 4 - subsubfunction number
1018
  * ecx = 4 - subsubfunction number
1019
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1019
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1020
Returned value:
1020
Returned value:
1021
  * function does not return value
1021
  * function does not return value
1022
 
1022
 
1023
-------- Subsubfunction 5 - simulate state of mouse buttons. ---------
1023
-------- Subsubfunction 5 - simulate state of mouse buttons. ---------
1024
Parameters:
1024
Parameters:
1025
  * eax = 18 - function number
1025
  * eax = 18 - function number
1026
  * ebx = 19 - subfunction number
1026
  * ebx = 19 - subfunction number
1027
  * ecx = 5 - subsubfunction number
1027
  * ecx = 5 - subsubfunction number
1028
  * edx = information about emulated state of mouse buttons:
1028
  * edx = information about emulated state of mouse buttons:
1029
    (same as return value in subfunction 2 of function 37)
1029
    (same as return value in subfunction 2 of function 37)
1030
    * bit 0 is set = left button is pressed
1030
    * bit 0 is set = left button is pressed
1031
    * bit 1 is set = right button is pressed
1031
    * bit 1 is set = right button is pressed
1032
    * bit 2 is set = middle button is pressed
1032
    * bit 2 is set = middle button is pressed
1033
    * bit 3 is set = 4th button is pressed
1033
    * bit 3 is set = 4th button is pressed
1034
    * bit 4 is set = 5th button is pressed
1034
    * bit 4 is set = 5th button is pressed
1035
Returned value:
1035
Returned value:
1036
  * function does not return value
1036
  * function does not return value
1037
Remarks:
1037
Remarks:
1038
  * It is recommended to set speed of the mouse (in subsubfunction 1)
1038
  * It is recommended to set speed of the mouse (in subsubfunction 1)
1039
    from 1 up to 9. The installed value is not inspected by the kernel
1039
    from 1 up to 9. The installed value is not inspected by the kernel
1040
    code, so set it carefully, at incorrect value the cursor
1040
    code, so set it carefully, at incorrect value the cursor
1041
    can "freeze". Speed of the mouse can be regulated through the
1041
    can "freeze". Speed of the mouse can be regulated through the
1042
    application SETUP.
1042
    application SETUP.
1043
  * Recommended delay of the mouse (in subsubfunction 3) = 10. Lower
1043
  * Recommended delay of the mouse (in subsubfunction 3) = 10. Lower
1044
    value is not handled by COM mice. At the very large values the
1044
    value is not handled by COM mice. At the very large values the
1045
    movement of the mouse on 1 pixel is impossible and the cursor will
1045
    movement of the mouse on 1 pixel is impossible and the cursor will
1046
    jump on the value of installed speed (subsubfunction 1). The
1046
    jump on the value of installed speed (subsubfunction 1). The
1047
    installed value is not inspected by the kernel code.
1047
    installed value is not inspected by the kernel code.
1048
    Mouse delay can be regulated through the application SETUP.
1048
    Mouse delay can be regulated through the application SETUP.
1049
  * The subsubfunction 4 does not check the passed value. Before
1049
  * The subsubfunction 4 does not check the passed value. Before
1050
    its call find out current screen resolution (with function 14)
1050
    its call find out current screen resolution (with function 14)
1051
    and check that the value of position is inside the limits of the
1051
    and check that the value of position is inside the limits of the
1052
    screen.
1052
    screen.
1053
 
1053
 
1054
======================================================================
1054
======================================================================
1055
======== Function 18, subfunction 20 - get information on RAM. =======
1055
======== Function 18, subfunction 20 - get information on RAM. =======
1056
======================================================================
1056
======================================================================
1057
Parameters:
1057
Parameters:
1058
  * eax = 18 - function number
1058
  * eax = 18 - function number
1059
  * ebx = 20 - subfunction number
1059
  * ebx = 20 - subfunction number
1060
  * ecx = pointer to the buffer for information (36 bytes)
1060
  * ecx = pointer to the buffer for information (36 bytes)
1061
Returned value:
1061
Returned value:
1062
  * eax = total size of existing RAM in pages
1062
  * eax = total size of existing RAM in pages
1063
    or -1 if error has occured
1063
    or -1 if error has occured
1064
  * buffer pointed to by ecx contains the following information:
1064
  * buffer pointed to by ecx contains the following information:
1065
    * +0:  dword: total size of existing RAM in pages
1065
    * +0:  dword: total size of existing RAM in pages
1066
    * +4:  dword: size of free RAM in pages
1066
    * +4:  dword: size of free RAM in pages
1067
    * +8:  dword: number of page faults (exceptions #PF)
1067
    * +8:  dword: number of page faults (exceptions #PF)
1068
                 in applications
1068
                 in applications
1069
    * +12: dword: size of kernel heap in bytes
1069
    * +12: dword: size of kernel heap in bytes
1070
    * +16: dword: free in kernel heap in bytes
1070
    * +16: dword: free in kernel heap in bytes
1071
    * +20: dword: total number of memory blocks in kernel heap
1071
    * +20: dword: total number of memory blocks in kernel heap
1072
    * +24: dword: number of free memory blocks in kernel heap
1072
    * +24: dword: number of free memory blocks in kernel heap
1073
    * +28: dword: size of maximum free block in kernel heap
1073
    * +28: dword: size of maximum free block in kernel heap
1074
                 (reserved)
1074
                 (reserved)
1075
    * +32: dword: size of maximum allocated block in kernel heap
1075
    * +32: dword: size of maximum allocated block in kernel heap
1076
                 (reserved)
1076
                 (reserved)
1077
 
1077
 
1078
======================================================================
1078
======================================================================
1079
===================== Function 18, subfunction 21 ====================
1079
===================== Function 18, subfunction 21 ====================
1080
======== Get slot number of process/thread by the identifier. ========
1080
======== Get slot number of process/thread by the identifier. ========
1081
======================================================================
1081
======================================================================
1082
Parameters:
1082
Parameters:
1083
  * eax = 18 - function number
1083
  * eax = 18 - function number
1084
  * ebx = 21 - subfunction number
1084
  * ebx = 21 - subfunction number
1085
  * ecx = identifer of process/thread (PID/TID)
1085
  * ecx = identifer of process/thread (PID/TID)
1086
Returned value:
1086
Returned value:
1087
  * eax = 0 - error (invalid identifier)
1087
  * eax = 0 - error (invalid identifier)
1088
  * otherwise eax = slot number
1088
  * otherwise eax = slot number
1089
 
1089
 
1090
======================================================================
1090
======================================================================
1091
===================== Function 18, subfunction 22 ====================
1091
===================== Function 18, subfunction 22 ====================
1092
============== Operations with window of another thread. =============
1092
============== Operations with window of another thread. =============
1093
======================================================================
1093
======================================================================
1094
Parameters:
1094
Parameters:
1095
  * eax = 18 - function number
1095
  * eax = 18 - function number
1096
  * ebx = 22 - subfunction number
1096
  * ebx = 22 - subfunction number
1097
  * ecx = operation type:
1097
  * ecx = operation type:
1098
    * 0 = minimize window of the thread with given slot number
1098
    * 0 = minimize window of the thread with given slot number
1099
    * 1 = minimize window of the thread with given identifier
1099
    * 1 = minimize window of the thread with given identifier
1100
    * 2 = restore window of the thread with given slot number
1100
    * 2 = restore window of the thread with given slot number
1101
    * 3 = restore window of the thread with given identifier
1101
    * 3 = restore window of the thread with given identifier
1102
  * edx = parameter (slot number or PID/TID)
1102
  * edx = parameter (slot number or PID/TID)
1103
Returned value:
1103
Returned value:
1104
  * eax = 0 - success
1104
  * eax = 0 - success
1105
  * eax = -1 - error (invalid identifier)
1105
  * eax = -1 - error (invalid identifier)
1106
Remarks:
1106
Remarks:
1107
  * The thread can minimize its window with subfunction 10.
1107
  * The thread can minimize its window with subfunction 10.
1108
  * One can restore and activate window simultaneously with
1108
  * One can restore and activate window simultaneously with
1109
    subfunction 3 (which requires slot number).
1109
    subfunction 3 (which requires slot number).
1110
 
1110
 
1111
======================================================================
1111
======================================================================
1112
======== Function 18, subfunction 23 - minimize all windows. ==========
1112
======== Function 18, subfunction 23 - minimize all windows. ==========
1113
======================================================================
1113
======================================================================
1114
Parameters:
1114
Parameters:
1115
  * eax = 18 - function number
1115
  * eax = 18 - function number
1116
  * ebx = 23 - subfunction number
1116
  * ebx = 23 - subfunction number
1117
Returned value:
1117
Returned value:
1118
  * eax = 0 - all windows have been minimized before a function call
1118
  * eax = 0 - all windows have been minimized before a function call
1119
  * eax = N - number of windows minimized from function
1119
  * eax = N - number of windows minimized from function
1120
Remarks:
1120
Remarks:
1121
  * Window of special thread (name begin to symbol @) is not minimize.
1121
  * Window of special thread (name begin to symbol @) is not minimize.
1122
 
1122
 
1123
======================================================================
1123
======================================================================
1124
======= Function 18, subfunction 24 - set limits of screen. ==========
1124
======= Function 18, subfunction 24 - set limits of screen. ==========
1125
======================================================================
1125
======================================================================
1126
Parameters:
1126
Parameters:
1127
  * eax = 18 - function number
1127
  * eax = 18 - function number
1128
  * ebx = 24 - subfunction number
1128
  * ebx = 24 - subfunction number
1129
  * ecx = new X size
1129
  * ecx = new X size
1130
  * edx = new Y size
1130
  * edx = new Y size
1131
Returned value:
1131
Returned value:
1132
  * function does not return value
1132
  * function does not return value
1133
Remarks:
1133
Remarks:
1134
  * The function does not change the physical size of the video mode.
1134
  * The function does not change the physical size of the video mode.
1135
    It is designed for non-standard displays which display the image
1135
    It is designed for non-standard displays which display the image
1136
    partially.
1136
    partially.
1137
  * The sizes specified in the function should not exceed the sizes
1137
  * The sizes specified in the function should not exceed the sizes
1138
    of the current video mode, otherwise the function will not change
1138
    of the current video mode, otherwise the function will not change
1139
    anything.
1139
    anything.
1140
 
1140
 
1141
======================================================================
1141
======================================================================
1142
==================== Function 20 - MIDI interface. ===================
1142
==================== Function 20 - MIDI interface. ===================
1143
======================================================================
1143
======================================================================
1144
 
1144
 
1145
----------------------- Subfunction 1 - reset ------------------------
1145
----------------------- Subfunction 1 - reset ------------------------
1146
Parameters:
1146
Parameters:
1147
  * eax = 20 - function number
1147
  * eax = 20 - function number
1148
  * ebx = 1 - subfunction number
1148
  * ebx = 1 - subfunction number
1149
 
1149
 
1150
-------------------- Subfunction 2 - output byte ---------------------
1150
-------------------- Subfunction 2 - output byte ---------------------
1151
Parameters:
1151
Parameters:
1152
  * eax = 20 - function number
1152
  * eax = 20 - function number
1153
  * ebx = 2 - subfunction number
1153
  * ebx = 2 - subfunction number
1154
  * cl = byte for output
1154
  * cl = byte for output
1155
Returned value (is the same for both subfunctions):
1155
Returned value (is the same for both subfunctions):
1156
  * eax = 0 - success
1156
  * eax = 0 - success
1157
  * eax = 1 - base port is not defined
1157
  * eax = 1 - base port is not defined
1158
Remarks:
1158
Remarks:
1159
  * Previously the base port must be defined by
1159
  * Previously the base port must be defined by
1160
    subfunction 1 of function 21.
1160
    subfunction 1 of function 21.
1161
 
1161
 
1162
======================================================================
1162
======================================================================
1163
======== Function 21, subfunction 1 - set MPU MIDI base port. ========
1163
======== Function 21, subfunction 1 - set MPU MIDI base port. ========
1164
======================================================================
1164
======================================================================
1165
Parameters:
1165
Parameters:
1166
  * eax = 21 - function number
1166
  * eax = 21 - function number
1167
  * ebx = 1 - subfunction number
1167
  * ebx = 1 - subfunction number
1168
  * ecx = number of base port
1168
  * ecx = number of base port
1169
Returned value
1169
Returned value
1170
  * eax = 0 - success
1170
  * eax = 0 - success
1171
  * eax = -1 - erratic number of a port
1171
  * eax = -1 - erratic number of a port
1172
Remarks:
1172
Remarks:
1173
  * Number of a port must satisfy to conditions 0x100<=ecx<=0xFFFF.
1173
  * Number of a port must satisfy to conditions 0x100<=ecx<=0xFFFF.
1174
  * The installation of base is necessary for function 20.
1174
  * The installation of base is necessary for function 20.
1175
  * To get base port use subfunction 1 of function 26.
1175
  * To get base port use subfunction 1 of function 26.
1176
 
1176
 
1177
======================================================================
1177
======================================================================
1178
========== Function 21, subfunction 2 - set keyboard layout. =========
1178
========== Function 21, subfunction 2 - set keyboard layout. =========
1179
======================================================================
1179
======================================================================
1180
Keyboard layout is used to convert keyboard scancodes to ASCII-codes,
1180
Keyboard layout is used to convert keyboard scancodes to ASCII-codes,
1181
which will be read by function 2.
1181
which will be read by function 2.
1182
Parameters:
1182
Parameters:
1183
  * eax = 21 - function number
1183
  * eax = 21 - function number
1184
  * ebx = 2 - subfunction number
1184
  * ebx = 2 - subfunction number
1185
  * ecx = which layout to set:
1185
  * ecx = which layout to set:
1186
    * 1 = normal layout
1186
    * 1 = normal layout
1187
    * 2 = layout at pressed Shift
1187
    * 2 = layout at pressed Shift
1188
    * 3 = layout at pressed Alt
1188
    * 3 = layout at pressed Alt
1189
  * edx = pointer to layout - table of length 128 bytes
1189
  * edx = pointer to layout - table of length 128 bytes
1190
Or:
1190
Or:
1191
  * ecx = 9
1191
  * ecx = 9
1192
  * dx = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1192
  * dx = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1193
Returned value:
1193
Returned value:
1194
  * eax = 0 - success
1194
  * eax = 0 - success
1195
  * eax = 1 - incorrect parameter
1195
  * eax = 1 - incorrect parameter
1196
Remarks:
1196
Remarks:
1197
  * If Alt is pressed, the layout with Alt is used;
1197
  * If Alt is pressed, the layout with Alt is used;
1198
    if Alt is not pressed, but Shift is pressed,
1198
    if Alt is not pressed, but Shift is pressed,
1199
    the layout with Shift is used;
1199
    the layout with Shift is used;
1200
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1200
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1201
    layout is used and then from the code is subtracted 0x60;
1201
    layout is used and then from the code is subtracted 0x60;
1202
    if no control key is pressed, the normal layout is used.
1202
    if no control key is pressed, the normal layout is used.
1203
  * To get layout and country identifier use
1203
  * To get layout and country identifier use
1204
    subfunction 2 of function 26.
1204
    subfunction 2 of function 26.
1205
  * Country identifier is global system variable, which is not used
1205
  * Country identifier is global system variable, which is not used
1206
    by the kernel itself; however the application '@panel' displays
1206
    by the kernel itself; however the application '@panel' displays
1207
    the corresponding icon.
1207
    the corresponding icon.
1208
  * The application @panel switches layouts on user request.
1208
  * The application @panel switches layouts on user request.
1209
 
1209
 
1210
======================================================================
1210
======================================================================
1211
============== Function 21, subfunction 3 - set CD base. =============
1211
============== Function 21, subfunction 3 - set CD base. =============
1212
======================================================================
1212
======================================================================
1213
Parameters:
1213
Parameters:
1214
  * eax = 21 - function number
1214
  * eax = 21 - function number
1215
  * ebx = 3 - subfunction number
1215
  * ebx = 3 - subfunction number
1216
  * ecx = CD base: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
1216
  * ecx = CD base: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
1217
Returned value:
1217
Returned value:
1218
  * eax = 0
1218
  * eax = 0
1219
Remarks:
1219
Remarks:
1220
  * CD base is used by function 24.
1220
  * CD base is used by function 24.
1221
  * To get CD base use subfunction 3 of function 26.
1221
  * To get CD base use subfunction 3 of function 26.
1222
 
1222
 
1223
======================================================================
1223
======================================================================
1224
========== Function 21, subfunction 5 - set system language. =========
1224
========== Function 21, subfunction 5 - set system language. =========
1225
======================================================================
1225
======================================================================
1226
Parameters:
1226
Parameters:
1227
  * eax = 21 - function number
1227
  * eax = 21 - function number
1228
  * ebx = 5 - subfunction number
1228
  * ebx = 5 - subfunction number
1229
  * ecx = system language (1=eng, 2=fi, 3=ger, 4=rus)
1229
  * ecx = system language (1=eng, 2=fi, 3=ger, 4=rus)
1230
Returned value:
1230
Returned value:
1231
  * eax = 0
1231
  * eax = 0
1232
Remarks:
1232
Remarks:
1233
  * System language is global system variable and is not used
1233
  * System language is global system variable and is not used
1234
    by the kernel itself, however application @panel draws the
1234
    by the kernel itself, however application @panel draws the
1235
    appropriate icon.
1235
    appropriate icon.
1236
  * Function does not check for correctness, as the kernel does not
1236
  * Function does not check for correctness, as the kernel does not
1237
    use this variable.
1237
    use this variable.
1238
  * To get system language use subfunction 5 of function 26.
1238
  * To get system language use subfunction 5 of function 26.
1239
 
1239
 
1240
======================================================================
1240
======================================================================
1241
============== Function 21, subfunction 7 - set HD base. =============
1241
============== Function 21, subfunction 7 - set HD base. =============
1242
======================================================================
1242
======================================================================
1243
The HD base defines hard disk to write with usage of obsolete
1243
The HD base defines hard disk to write with usage of obsolete
1244
syntax /HD in obsolete function 58; at usage of modern syntax
1244
syntax /HD in obsolete function 58; at usage of modern syntax
1245
/HD0,/HD1,/HD2,/HD3 base is set automatically.
1245
/HD0,/HD1,/HD2,/HD3 base is set automatically.
1246
Parameters:
1246
Parameters:
1247
  * eax = 21 - function number
1247
  * eax = 21 - function number
1248
  * ebx = 7 - subfunction number
1248
  * ebx = 7 - subfunction number
1249
  * ecx = HD base: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
1249
  * ecx = HD base: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
1250
Returned value:
1250
Returned value:
1251
  * eax = 0
1251
  * eax = 0
1252
Remarks:
1252
Remarks:
1253
  * Any application at any time can change the base.
1253
  * Any application at any time can change the base.
1254
  * Do not change base, when any application works with hard disk.
1254
  * Do not change base, when any application works with hard disk.
1255
    If you do not want system bugs.
1255
    If you do not want system bugs.
1256
  * To get HD base use subfunction 7 of function 26.
1256
  * To get HD base use subfunction 7 of function 26.
1257
  * It is also necessary to define used partition of hard disk by
1257
  * It is also necessary to define used partition of hard disk by
1258
    subfunction 8.
1258
    subfunction 8.
1259
 
1259
 
1260
======================================================================
1260
======================================================================
1261
========= Function 21, subfunction 8 - set used HD partition. ========
1261
========= Function 21, subfunction 8 - set used HD partition. ========
1262
======================================================================
1262
======================================================================
1263
The HD partition defines partition of the hard disk to write with
1263
The HD partition defines partition of the hard disk to write with
1264
usage of obsolete syntax /HD and obsolete function 58;
1264
usage of obsolete syntax /HD and obsolete function 58;
1265
at usage of functions 58 and 70 and modern syntax /HD0,/HD1,/HD2,/HD3
1265
at usage of functions 58 and 70 and modern syntax /HD0,/HD1,/HD2,/HD3
1266
base and partition are set automatically.
1266
base and partition are set automatically.
1267
Parameters:
1267
Parameters:
1268
  * eax = 21 - function number
1268
  * eax = 21 - function number
1269
  * ebx = 8 - subfunction number
1269
  * ebx = 8 - subfunction number
1270
  * ecx = HD partition (beginning from 1)
1270
  * ecx = HD partition (beginning from 1)
1271
Return value:
1271
Return value:
1272
  * eax = 0
1272
  * eax = 0
1273
Remarks:
1273
Remarks:
1274
  * Any application at any time can change partition.
1274
  * Any application at any time can change partition.
1275
  * Do not change partition when any application works with hard disk.
1275
  * Do not change partition when any application works with hard disk.
1276
    If you do not want system bugs.
1276
    If you do not want system bugs.
1277
  * To get used partition use subfunction 8 of function 26.
1277
  * To get used partition use subfunction 8 of function 26.
1278
  * There is no correctness checks.
1278
  * There is no correctness checks.
1279
  * To get the number of partitions of a hard disk use
1279
  * To get the number of partitions of a hard disk use
1280
    subfunction 11 of function 18.
1280
    subfunction 11 of function 18.
1281
  * It is also necessary to define used HD base by subfunction 7.
1281
  * It is also necessary to define used HD base by subfunction 7.
1282
 
1282
 
1283
======================================================================
1283
======================================================================
1284
 Function 21, subfunction 11 - enable/disable low-level access to HD.
1284
 Function 21, subfunction 11 - enable/disable low-level access to HD.
1285
======================================================================
1285
======================================================================
1286
Parameters:
1286
Parameters:
1287
  * eax = 21 - function number
1287
  * eax = 21 - function number
1288
  * ebx = 11 - subfunction number
1288
  * ebx = 11 - subfunction number
1289
  * ecx = 0/1 - disable/enable
1289
  * ecx = 0/1 - disable/enable
1290
Returned value:
1290
Returned value:
1291
  * eax = 0
1291
  * eax = 0
1292
Remarks:
1292
Remarks:
1293
  * Is used in LBA-read (subfunction 8 of function 58).
1293
  * Is used in LBA-read (subfunction 8 of function 58).
1294
  * The current implementation uses only low bit of ecx.
1294
  * The current implementation uses only low bit of ecx.
1295
  * To get current status use subfunction 11 of function 26.
1295
  * To get current status use subfunction 11 of function 26.
1296
 
1296
 
1297
======================================================================
1297
======================================================================
1298
 Function 21, subfunction 12 - enable/disable low-level access to PCI.
1298
 Function 21, subfunction 12 - enable/disable low-level access to PCI.
1299
======================================================================
1299
======================================================================
1300
Parameters:
1300
Parameters:
1301
  * eax = 21 - function number
1301
  * eax = 21 - function number
1302
  * ebx = 12 - subfunction number
1302
  * ebx = 12 - subfunction number
1303
  * ecx = 0/1 - disable/enable
1303
  * ecx = 0/1 - disable/enable
1304
Returned value:
1304
Returned value:
1305
  * eax = 0
1305
  * eax = 0
1306
Remarks:
1306
Remarks:
1307
  * Is used in operations with PCI bus (function 62).
1307
  * Is used in operations with PCI bus (function 62).
1308
  * The current implementation uses only low bit of ecx.
1308
  * The current implementation uses only low bit of ecx.
1309
  * To get current status use subfunction 12 of function 26.
1309
  * To get current status use subfunction 12 of function 26.
1310
 
1310
 
1311
======================================================================
1311
======================================================================
1312
============ Function 21, subfunction 13, subsubfunction 1 ===========
1312
============ Function 21, subfunction 13, subsubfunction 1 ===========
1313
======== Initialize + get information on the driver vmode.mdr. =======
1313
======== Initialize + get information on the driver vmode.mdr. =======
1314
======================================================================
1314
======================================================================
1315
Parameters:
1315
Parameters:
1316
  * eax = 21 - function number
1316
  * eax = 21 - function number
1317
  * ebx = 13 - subfunction number
1317
  * ebx = 13 - subfunction number
1318
  * ecx = 1 - number of the driver function
1318
  * ecx = 1 - number of the driver function
1319
  * edx = pointer to 512-bytes buffer
1319
  * edx = pointer to 512-bytes buffer
1320
Returned value:
1320
Returned value:
1321
  * if driver is not loaded
1321
  * if driver is not loaded
1322
    (never happens in the current implementation):
1322
    (never happens in the current implementation):
1323
    * eax = -1
1323
    * eax = -1
1324
    * ebx, ecx destroyed
1324
    * ebx, ecx destroyed
1325
  * if driver is loaded:
1325
  * if driver is loaded:
1326
    * eax = 'MDAZ' (in fasm style, that is 'M' - low byte, 'Z' - high)
1326
    * eax = 'MDAZ' (in fasm style, that is 'M' - low byte, 'Z' - high)
1327
      - signature
1327
      - signature
1328
    * ebx = current frequency of the scanning (in Hz)
1328
    * ebx = current frequency of the scanning (in Hz)
1329
    * ecx destroyed
1329
    * ecx destroyed
1330
    * buffer pointed to by edx is filled
1330
    * buffer pointed to by edx is filled
1331
Format of the buffer:
1331
Format of the buffer:
1332
  * +0: 32*byte: driver name, "Trans VideoDriver"
1332
  * +0: 32*byte: driver name, "Trans VideoDriver"
1333
    (without quotes, supplemented by spaces)
1333
    (without quotes, supplemented by spaces)
1334
  * +32 = +0x20: dword: driver version (version x.y is encoded as
1334
  * +32 = +0x20: dword: driver version (version x.y is encoded as
1335
    y*65536+x), for the current implementation is 1 (1.0)
1335
    y*65536+x), for the current implementation is 1 (1.0)
1336
  * +36 = +0x24: 7*dword: reserved (0 in the current implementation)
1336
  * +36 = +0x24: 7*dword: reserved (0 in the current implementation)
1337
  * +64 = +0x40: 32*word: list of supported videomodes (each word
1337
  * +64 = +0x40: 32*word: list of supported videomodes (each word
1338
    is number of a videomode, after list itself there are zeroes)
1338
    is number of a videomode, after list itself there are zeroes)
1339
  * +128 = +0x80: 32*(5*word): list of supported frequences of the
1339
  * +128 = +0x80: 32*(5*word): list of supported frequences of the
1340
    scannings for videomodes: for each videomode listed in the
1340
    scannings for videomodes: for each videomode listed in the
1341
    previous field up to 5 supported frequences are given
1341
    previous field up to 5 supported frequences are given
1342
    (unused positions contain zeroes)
1342
    (unused positions contain zeroes)
1343
Remarks:
1343
Remarks:
1344
  * Function initializes the driver (if it is not initialized yet)
1344
  * Function initializes the driver (if it is not initialized yet)
1345
    and must be called first, before others (otherwise they will do
1345
    and must be called first, before others (otherwise they will do
1346
    nothing and return -1).
1346
    nothing and return -1).
1347
  * The current implementation supports only one frequency
1347
  * The current implementation supports only one frequency
1348
    of the scanning on videomode.
1348
    of the scanning on videomode.
1349
 
1349
 
1350
======================================================================
1350
======================================================================
1351
============ Function 21, subfunction 13, subsubfunction 2 ===========
1351
============ Function 21, subfunction 13, subsubfunction 2 ===========
1352
================ Get information on current videomode. ===============
1352
================ Get information on current videomode. ===============
1353
======================================================================
1353
======================================================================
1354
Parameters:
1354
Parameters:
1355
  * eax = 21 - function number
1355
  * eax = 21 - function number
1356
  * ebx = 13 - subfunction number
1356
  * ebx = 13 - subfunction number
1357
  * ecx = 2 - number of the driver function
1357
  * ecx = 2 - number of the driver function
1358
Returned value:
1358
Returned value:
1359
  * eax = -1 - driver is not loaded or not initialized;
1359
  * eax = -1 - driver is not loaded or not initialized;
1360
    ebx,ecx are destroyed
1360
    ebx,ecx are destroyed
1361
  * eax = [width]*65536 + [height]
1361
  * eax = [width]*65536 + [height]
1362
  * ebx = frequency of the vertical scanning (in Hz)
1362
  * ebx = frequency of the vertical scanning (in Hz)
1363
  * ecx = number of current videomode
1363
  * ecx = number of current videomode
1364
Remarks:
1364
Remarks:
1365
  * Driver must be initialized by call to
1365
  * Driver must be initialized by call to
1366
    driver function 1.
1366
    driver function 1.
1367
  * If only screen sizes are required, it is more expedient to use
1367
  * If only screen sizes are required, it is more expedient to use
1368
    function 14 taking into account that it
1368
    function 14 taking into account that it
1369
    returns sizes on 1 less.
1369
    returns sizes on 1 less.
1370
 
1370
 
1371
======================================================================
1371
======================================================================
1372
=== Function 21, subfunction 13, subsubfunction 3 - set videomode. ===
1372
=== Function 21, subfunction 13, subsubfunction 3 - set videomode. ===
1373
======================================================================
1373
======================================================================
1374
Parameters:
1374
Parameters:
1375
  * eax = 21 - function number
1375
  * eax = 21 - function number
1376
  * ebx = 13 - subfunction number
1376
  * ebx = 13 - subfunction number
1377
  * ecx = 3 - number of the driver function
1377
  * ecx = 3 - number of the driver function
1378
  * edx = [scanning frequency]*65536 + [videomode number]
1378
  * edx = [scanning frequency]*65536 + [videomode number]
1379
Returned value:
1379
Returned value:
1380
  * eax = -1 - driver is not loaded, not initialized or
1380
  * eax = -1 - driver is not loaded, not initialized or
1381
    an error has occured
1381
    an error has occured
1382
  * eax = 0 - success
1382
  * eax = 0 - success
1383
  * ebx, ecx destroyed
1383
  * ebx, ecx destroyed
1384
Remarks:
1384
Remarks:
1385
  * Driver must be initialized by driver function 1.
1385
  * Driver must be initialized by driver function 1.
1386
  * The videomode number and frequency must be in the table
1386
  * The videomode number and frequency must be in the table
1387
    returned by driver function 1.
1387
    returned by driver function 1.
1388
 
1388
 
1389
======================================================================
1389
======================================================================
1390
============ Function 21, subfunction 13, subsubfunction 4 ===========
1390
============ Function 21, subfunction 13, subsubfunction 4 ===========
1391
================== Return to the initial videomode. ==================
1391
================== Return to the initial videomode. ==================
1392
======================================================================
1392
======================================================================
1393
Returns the screen to the videomode set at system boot.
1393
Returns the screen to the videomode set at system boot.
1394
Parameters:
1394
Parameters:
1395
  * eax = 21 - function number
1395
  * eax = 21 - function number
1396
  * ebx = 13 - subfunction number
1396
  * ebx = 13 - subfunction number
1397
  * ecx = 4 - number of the driver function
1397
  * ecx = 4 - number of the driver function
1398
Returned value:
1398
Returned value:
1399
  * eax = -1 - driver is not loaded or not initialized
1399
  * eax = -1 - driver is not loaded or not initialized
1400
  * eax = 0 - success
1400
  * eax = 0 - success
1401
  * ebx, ecx destroyed
1401
  * ebx, ecx destroyed
1402
Remarks:
1402
Remarks:
1403
  * Driver must be initialized by call to driver function 1.
1403
  * Driver must be initialized by call to driver function 1.
1404
 
1404
 
1405
======================================================================
1405
======================================================================
1406
============ Function 21, subfunction 13, subsubfunction 5 ===========
1406
============ Function 21, subfunction 13, subsubfunction 5 ===========
1407
===== Increase/decrease the size of the visible area of monitor. =====
1407
===== Increase/decrease the size of the visible area of monitor. =====
1408
======================================================================
1408
======================================================================
1409
Parameters:
1409
Parameters:
1410
  * eax = 21 - function number
1410
  * eax = 21 - function number
1411
  * ebx = 13 - subfunction number
1411
  * ebx = 13 - subfunction number
1412
  * ecx = 5 - number of the driver function
1412
  * ecx = 5 - number of the driver function
1413
  * edx = 0/1 - decrease/increase horizontal size on 1 position
1413
  * edx = 0/1 - decrease/increase horizontal size on 1 position
1414
  * edx = 2/3 - is not supported in the current implementation;
1414
  * edx = 2/3 - is not supported in the current implementation;
1415
    is planned as decrease/increase vertical size on 1 position
1415
    is planned as decrease/increase vertical size on 1 position
1416
Returned value:
1416
Returned value:
1417
  * eax = -1 - driver is not loaded or not initialized
1417
  * eax = -1 - driver is not loaded or not initialized
1418
  * eax = 0 - success
1418
  * eax = 0 - success
1419
  * ebx, ecx destroyed
1419
  * ebx, ecx destroyed
1420
Remarks:
1420
Remarks:
1421
  * Driver must be initialized by call to driver function 1.
1421
  * Driver must be initialized by call to driver function 1.
1422
  * Function influences only the physical size of the screen image;
1422
  * Function influences only the physical size of the screen image;
1423
    the logical size (number of pixels) does not change.
1423
    the logical size (number of pixels) does not change.
1424
 
1424
 
1425
======================================================================
1425
======================================================================
1426
================= Function 22 - set system date/time. ================
1426
================= Function 22 - set system date/time. ================
1427
======================================================================
1427
======================================================================
1428
Parameters:
1428
Parameters:
1429
  * eax = 22 - function number
1429
  * eax = 22 - function number
1430
  * ebx = 0 - set time
1430
  * ebx = 0 - set time
1431
    * ecx = 0x00SSMMHH - time in the binary-decimal code (BCD):
1431
    * ecx = 0x00SSMMHH - time in the binary-decimal code (BCD):
1432
    * HH=hour 00..23
1432
    * HH=hour 00..23
1433
    * MM=minute 00..59
1433
    * MM=minute 00..59
1434
    * SS=second 00..59
1434
    * SS=second 00..59
1435
  * ebx = 1 - set date
1435
  * ebx = 1 - set date
1436
    * ecx = 0x00DDMMYY - date in the binary-decimal code (BCD):
1436
    * ecx = 0x00DDMMYY - date in the binary-decimal code (BCD):
1437
    * DD=day 01..31
1437
    * DD=day 01..31
1438
    * MM=month 01..12
1438
    * MM=month 01..12
1439
    * YY=year 00..99
1439
    * YY=year 00..99
1440
  * ebx = 2 - set day of week
1440
  * ebx = 2 - set day of week
1441
    * ecx = 1 for Sunday, ..., 7 for Saturday
1441
    * ecx = 1 for Sunday, ..., 7 for Saturday
1442
  * ebx = 3 - set alarm clock
1442
  * ebx = 3 - set alarm clock
1443
    * ecx = 0x00SSMMHH
1443
    * ecx = 0x00SSMMHH
1444
Returned value:
1444
Returned value:
1445
  * eax = 0 - success
1445
  * eax = 0 - success
1446
  * eax = 1 - incorrect parameter
1446
  * eax = 1 - incorrect parameter
1447
  * eax = 2 - CMOS-battery was unloaded
1447
  * eax = 2 - CMOS-battery was unloaded
1448
Remarks:
1448
Remarks:
1449
  * Value of installation of day of week seems to be doubtful,
1449
  * Value of installation of day of week seems to be doubtful,
1450
    as it a little where is used
1450
    as it a little where is used
1451
    (day of week can be calculated by date).
1451
    (day of week can be calculated by date).
1452
  * Alarm clock can be set on operation in the given time every day.
1452
  * Alarm clock can be set on operation in the given time every day.
1453
    But there is no existing system function to disable it.
1453
    But there is no existing system function to disable it.
1454
  * Operation of alarm clock consists in generation IRQ8.
1454
  * Operation of alarm clock consists in generation IRQ8.
1455
  * Generally CMOS supports for alarm clock set of value 0xFF
1455
  * Generally CMOS supports for alarm clock set of value 0xFF
1456
    as one of parameters and it means that the appropriate parameter
1456
    as one of parameters and it means that the appropriate parameter
1457
    is ignored. But current implementation does not allow this
1457
    is ignored. But current implementation does not allow this
1458
    (will return 1).
1458
    (will return 1).
1459
  * Alarm clock is a global system resource; the set of
1459
  * Alarm clock is a global system resource; the set of
1460
    an alarm clock cancels automatically the previous set.
1460
    an alarm clock cancels automatically the previous set.
1461
    However, at moment no program uses it.
1461
    However, at moment no program uses it.
1462
 
1462
 
1463
======================================================================
1463
======================================================================
1464
============= Function 23 - wait for event with timeout. =============
1464
============= Function 23 - wait for event with timeout. =============
1465
======================================================================
1465
======================================================================
1466
If the message queue is empty, waits for new message in the queue,
1466
If the message queue is empty, waits for new message in the queue,
1467
but no more than given time. Then reads out a message from the queue.
1467
but no more than given time. Then reads out a message from the queue.
1468
 
1468
 
1469
Parameters:
1469
Parameters:
1470
  * eax = 23 - function number
1470
  * eax = 23 - function number
1471
  * ebx = timeout (in 1/100 of second)
1471
  * ebx = timeout (in 1/100 of second)
1472
Returned value:
1472
Returned value:
1473
  * eax = 0 - the message queue is empty
1473
  * eax = 0 - the message queue is empty
1474
  * otherwise eax = event (see the list of events)
1474
  * otherwise eax = event (see the list of events)
1475
Remarks:
1475
Remarks:
1476
  * Only those events are taken into account, which enter into
1476
  * Only those events are taken into account, which enter into
1477
    the mask set by function 40. By default it is
1477
    the mask set by function 40. By default it is
1478
    redraw, key and button events.
1478
    redraw, key and button events.
1479
  * To check for presence of a message in the queue use function 11.
1479
  * To check for presence of a message in the queue use function 11.
1480
    To wait without timeout use function 10.
1480
    To wait without timeout use function 10.
1481
  * Transmission ebx=0 results in immediate returning eax=0.
1481
  * Transmission ebx=0 results in immediate returning eax=0.
1482
  * Current implementation returns immediately with eax=0,
1482
  * Current implementation returns immediately with eax=0,
1483
    if the addition of ebx with the current value of time counter
1483
    if the addition of ebx with the current value of time counter
1484
    makes 32-bit overflow.
1484
    makes 32-bit overflow.
1485
 
1485
 
1486
======================================================================
1486
======================================================================
1487
======== Function 24, subfunction 1 - begin to play CD-audio. ========
1487
======== Function 24, subfunction 1 - begin to play CD-audio. ========
1488
======================================================================
1488
======================================================================
1489
Parameters:
1489
Parameters:
1490
  * eax = 24 - function number
1490
  * eax = 24 - function number
1491
  * ebx = 1 - subfunction number
1491
  * ebx = 1 - subfunction number
1492
  * ecx = 0x00FRSSMM, where
1492
  * ecx = 0x00FRSSMM, where
1493
    * MM = starting minute
1493
    * MM = starting minute
1494
    * SS = starting second
1494
    * SS = starting second
1495
    * FR = starting frame
1495
    * FR = starting frame
1496
Returned value:
1496
Returned value:
1497
  * eax = 0 - success
1497
  * eax = 0 - success
1498
  * eax = 1 - CD base is not defined
1498
  * eax = 1 - CD base is not defined
1499
Remarks:
1499
Remarks:
1500
  * Previously CD base must be defined by the call to
1500
  * Previously CD base must be defined by the call to
1501
    subfunction 3 of function 21.
1501
    subfunction 3 of function 21.
1502
  * One second includes 75 frames, one minute includes 60 seconds.
1502
  * One second includes 75 frames, one minute includes 60 seconds.
1503
  * The function is asynchronous (returns control, when play begins).
1503
  * The function is asynchronous (returns control, when play begins).
1504
 
1504
 
1505
======================================================================
1505
======================================================================
1506
======= Function 24, subfunction 2 - get information on tracks. ======
1506
======= Function 24, subfunction 2 - get information on tracks. ======
1507
======================================================================
1507
======================================================================
1508
Parameters:
1508
Parameters:
1509
  * eax = 24 - function number
1509
  * eax = 24 - function number
1510
  * ebx = 2 - subfunction number
1510
  * ebx = 2 - subfunction number
1511
  * ecx = pointer to the buffer for the table
1511
  * ecx = pointer to the buffer for the table
1512
    (maximum 8*64h+4 bytes=100 tracks)
1512
    (maximum 8*64h+4 bytes=100 tracks)
1513
Returned value:
1513
Returned value:
1514
  * eax = 0 - success
1514
  * eax = 0 - success
1515
  * eax = 1 - CD base is not defined
1515
  * eax = 1 - CD base is not defined
1516
Remarks:
1516
Remarks:
1517
  * The format of the table with tracks information is the same as
1517
  * The format of the table with tracks information is the same as
1518
    for ATAPI-CD command 43h (READ TOC), usual table (subcommand 00h).
1518
    for ATAPI-CD command 43h (READ TOC), usual table (subcommand 00h).
1519
    Function returns addresses in MSF.
1519
    Function returns addresses in MSF.
1520
  * Previously CD base port must be set by call to
1520
  * Previously CD base port must be set by call to
1521
    subfunction 3 of function 21.
1521
    subfunction 3 of function 21.
1522
  * Function returns information only about no more than 100
1522
  * Function returns information only about no more than 100
1523
    first tracks. In most cases it is enough.
1523
    first tracks. In most cases it is enough.
1524
 
1524
 
1525
======================================================================
1525
======================================================================
1526
========== Function 24, subfunction 3 - stop play CD-audio. ==========
1526
========== Function 24, subfunction 3 - stop play CD-audio. ==========
1527
======================================================================
1527
======================================================================
1528
Parameters:
1528
Parameters:
1529
  * eax = 24 - function number
1529
  * eax = 24 - function number
1530
  * ebx = 1 - subfunction number
1530
  * ebx = 1 - subfunction number
1531
Returned value:
1531
Returned value:
1532
  * eax = 0 - success
1532
  * eax = 0 - success
1533
  * eax = 1 - CD base is not defined
1533
  * eax = 1 - CD base is not defined
1534
Remarks:
1534
Remarks:
1535
  * Previously CD base port must be defined by call to
1535
  * Previously CD base port must be defined by call to
1536
    subfunction 3 of function 21.
1536
    subfunction 3 of function 21.
1537
 
1537
 
1538
======================================================================
1538
======================================================================
1539
======= Function 24, subfunction 4 - eject tray of disk drive. =======
1539
======= Function 24, subfunction 4 - eject tray of disk drive. =======
1540
======================================================================
1540
======================================================================
1541
Parameters:
1541
Parameters:
1542
  * eax = 24 - function number
1542
  * eax = 24 - function number
1543
  * ebx = 4 - subfunction number
1543
  * ebx = 4 - subfunction number
1544
  * ecx = position of CD/DVD-drive
1544
  * ecx = position of CD/DVD-drive
1545
      (from 0=Primary Master to 3=Secondary Slave)
1545
      (from 0=Primary Master to 3=Secondary Slave)
1546
Returned value:
1546
Returned value:
1547
  * function does not return value
1547
  * function does not return value
1548
Remarks:
1548
Remarks:
1549
  * The function is supported only for ATAPI devices (CD and DVD).
1549
  * The function is supported only for ATAPI devices (CD and DVD).
1550
  * When the tray is being ejected,
1550
  * When the tray is being ejected,
1551
    manual control of tray is unlocked.
1551
    manual control of tray is unlocked.
1552
  * When the tray is being ejected, the code clears the cache for
1552
  * When the tray is being ejected, the code clears the cache for
1553
    corresponding device.
1553
    corresponding device.
1554
  * An example of usage of the function is the application CD_tray.
1554
  * An example of usage of the function is the application CD_tray.
1555
 
1555
 
1556
======================================================================
1556
======================================================================
1557
======== Function 24, subfunction 5 - load tray of disk drive. =======
1557
======== Function 24, subfunction 5 - load tray of disk drive. =======
1558
======================================================================
1558
======================================================================
1559
Parameters:
1559
Parameters:
1560
  * eax = 24 - function number
1560
  * eax = 24 - function number
1561
  * ebx = 5 - subfunction number
1561
  * ebx = 5 - subfunction number
1562
  * ecx = position of CD/DVD-drive
1562
  * ecx = position of CD/DVD-drive
1563
      (from 0=Primary Master to 3=Secondary Slave)
1563
      (from 0=Primary Master to 3=Secondary Slave)
1564
Returned value:
1564
Returned value:
1565
  * function does not return value
1565
  * function does not return value
1566
Remarks:
1566
Remarks:
1567
  * The function is supported only for ATAPI devices (CD and DVD).
1567
  * The function is supported only for ATAPI devices (CD and DVD).
1568
  * An example of usage of the function is the application CD_tray.
1568
  * An example of usage of the function is the application CD_tray.
1569
 
1569
 
1570
======================================================================
1570
======================================================================
1571
======= Function 25 - put image area on the background layer. ========
1571
======= Function 25 - put image area on the background layer. ========
1572
======================================================================
1572
======================================================================
1573
Paramters:
1573
Paramters:
1574
  * eax = 25 - function number
1574
  * eax = 25 - function number
1575
  * ebx = pointer to the previously allocated memory area,
1575
  * ebx = pointer to the previously allocated memory area,
1576
        where placed the source images in a format BBGGRRTTBBGGRRTT...
1576
        where placed the source images in a format BBGGRRTTBBGGRRTT...
1577
  * ecx = [size on axis x]*65536 + [size on axis y]
1577
  * ecx = [size on axis x]*65536 + [size on axis y]
1578
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1578
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1579
Returned value:
1579
Returned value:
1580
  * function does not return value
1580
  * function does not return value
1581
Remarks:
1581
Remarks:
1582
  * Coordinates of the image are coordinates of the upper left corner
1582
  * Coordinates of the image are coordinates of the upper left corner
1583
    of the image relative to the screen.
1583
    of the image relative to the screen.
1584
  * Size of the image in bytes is 4*xsize*ysize
1584
  * Size of the image in bytes is 4*xsize*ysize
1585
  * TT - byte pointer of transparency, at current version:
1585
  * TT - byte pointer of transparency, at current version:
1586
         1 to FF - opaque, 0 - transparent.
1586
         1 to FF - opaque, 0 - transparent.
1587
  * The function places the image directly to LFB. It is not for
1587
  * The function places the image directly to LFB. It is not for
1588
    background image f.15. Options f.15 to f.25 does not make sense.
1588
    background image f.15. Options f.15 to f.25 does not make sense.
1589
 
1589
 
1590
======================================================================
1590
======================================================================
1591
======== Function 26, subfunction 1 - get MPU MIDI base port. ========
1591
======== Function 26, subfunction 1 - get MPU MIDI base port. ========
1592
======================================================================
1592
======================================================================
1593
Parameters:
1593
Parameters:
1594
  * eax = 26 - function number
1594
  * eax = 26 - function number
1595
  * ebx = 1 - subfunction number
1595
  * ebx = 1 - subfunction number
1596
Returned value:
1596
Returned value:
1597
  * eax = port number
1597
  * eax = port number
1598
Parameters:
1598
Parameters:
1599
  * To set base port use subfunction 1 of function 21.
1599
  * To set base port use subfunction 1 of function 21.
1600
 
1600
 
1601
======================================================================
1601
======================================================================
1602
========== Function 26, subfunction 2 - get keyboard layout. =========
1602
========== Function 26, subfunction 2 - get keyboard layout. =========
1603
======================================================================
1603
======================================================================
1604
The keyboard layout is used to convert keyboard scancodes to
1604
The keyboard layout is used to convert keyboard scancodes to
1605
ASCII-codes for function 2.
1605
ASCII-codes for function 2.
1606
Parameters:
1606
Parameters:
1607
  * eax = 26 - function number
1607
  * eax = 26 - function number
1608
  * ebx = 2 - subfunction number
1608
  * ebx = 2 - subfunction number
1609
  * ecx = what layout to get:
1609
  * ecx = what layout to get:
1610
    * 1 = normal layout
1610
    * 1 = normal layout
1611
    * 2 = layout with pressed Shift
1611
    * 2 = layout with pressed Shift
1612
    * 3 = layout with pressed Alt
1612
    * 3 = layout with pressed Alt
1613
  * edx = pointer to the 128-bytes buffer, where the layout will be
1613
  * edx = pointer to the 128-bytes buffer, where the layout will be
1614
    copied
1614
    copied
1615
Returned value:
1615
Returned value:
1616
  * function does not return value
1616
  * function does not return value
1617
Or:
1617
Or:
1618
  * eax = 26 - function number
1618
  * eax = 26 - function number
1619
  * ebx = 2 - subfunction number
1619
  * ebx = 2 - subfunction number
1620
  * ecx = 9
1620
  * ecx = 9
1621
Returned value:
1621
Returned value:
1622
  * eax = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1622
  * eax = country identifier (1=eng, 2=fi, 3=ger, 4=rus)
1623
Remarks:
1623
Remarks:
1624
  * If Alt is pressed, the layout with Alt is used;
1624
  * If Alt is pressed, the layout with Alt is used;
1625
    if Alt is not pressed, but Shift is pressed,
1625
    if Alt is not pressed, but Shift is pressed,
1626
    the layout with Shift is used;
1626
    the layout with Shift is used;
1627
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1627
    if Alt and Shift are not pressed, but Ctrl is pressed, the normal
1628
    layout is used and then from the code is subtracted 0x60;
1628
    layout is used and then from the code is subtracted 0x60;
1629
    if no control key is pressed, the normal layout is used.
1629
    if no control key is pressed, the normal layout is used.
1630
  * To set layout and country identifier use
1630
  * To set layout and country identifier use
1631
    subfunction 2 of function 21.
1631
    subfunction 2 of function 21.
1632
  * Country identifier is global system variable, which is not used
1632
  * Country identifier is global system variable, which is not used
1633
    by the kernel itself; however the application '@panel' displays
1633
    by the kernel itself; however the application '@panel' displays
1634
    the corresponding icon (using this function).
1634
    the corresponding icon (using this function).
1635
  * The application @panel switches layouts on user request.
1635
  * The application @panel switches layouts on user request.
1636
 
1636
 
1637
======================================================================
1637
======================================================================
1638
============== Function 26, subfunction 3 - get CD base. =============
1638
============== Function 26, subfunction 3 - get CD base. =============
1639
======================================================================
1639
======================================================================
1640
Parameters:
1640
Parameters:
1641
  * eax = 26 - function number
1641
  * eax = 26 - function number
1642
  * ebx = 3 - subfunction number
1642
  * ebx = 3 - subfunction number
1643
Returned value:
1643
Returned value:
1644
  * eax = CD base: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
1644
  * eax = CD base: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
1645
Remarks:
1645
Remarks:
1646
  * CD base is used by function 24.
1646
  * CD base is used by function 24.
1647
  * To set CD base use subfunction 3 of function 21.
1647
  * To set CD base use subfunction 3 of function 21.
1648
 
1648
 
1649
======================================================================
1649
======================================================================
1650
========== Function 26, subfunction 5 - get system language. =========
1650
========== Function 26, subfunction 5 - get system language. =========
1651
======================================================================
1651
======================================================================
1652
Parameters:
1652
Parameters:
1653
  * eax = 26 - function number
1653
  * eax = 26 - function number
1654
  * ebx = 5 - subfunction number
1654
  * ebx = 5 - subfunction number
1655
Returned value:
1655
Returned value:
1656
  * eax = system language (1=eng, 2=fi, 3=ger, 4=rus)
1656
  * eax = system language (1=eng, 2=fi, 3=ger, 4=rus)
1657
Remarks:
1657
Remarks:
1658
  * System language is global system variable and is not used
1658
  * System language is global system variable and is not used
1659
    by the kernel itself, however application @panel draws the
1659
    by the kernel itself, however application @panel draws the
1660
    appropriate icon (using this function).
1660
    appropriate icon (using this function).
1661
  * To set system language use subfunction 5 of function 21.
1661
  * To set system language use subfunction 5 of function 21.
1662
 
1662
 
1663
======================================================================
1663
======================================================================
1664
============== Function 26, subfunction 7 - get HD base. =============
1664
============== Function 26, subfunction 7 - get HD base. =============
1665
======================================================================
1665
======================================================================
1666
The HD base defines hard disk to write with usage of obsolete
1666
The HD base defines hard disk to write with usage of obsolete
1667
syntax /HD in obsolete function 58; at usage of modern syntax
1667
syntax /HD in obsolete function 58; at usage of modern syntax
1668
/HD0,/HD1,/HD2,/HD3 base is set automatically.
1668
/HD0,/HD1,/HD2,/HD3 base is set automatically.
1669
Parameters:
1669
Parameters:
1670
  * eax = 26 - function number
1670
  * eax = 26 - function number
1671
  * ebx = 7 - subfunction number
1671
  * ebx = 7 - subfunction number
1672
Returned value:
1672
Returned value:
1673
  * eax = HD base: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
1673
  * eax = HD base: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
1674
Remarks:
1674
Remarks:
1675
  * Any application in any time can change HD base.
1675
  * Any application in any time can change HD base.
1676
  * To set base use subfunction 7 of function 21.
1676
  * To set base use subfunction 7 of function 21.
1677
  * To get used partition of hard disk use subfunction 8.
1677
  * To get used partition of hard disk use subfunction 8.
1678
 
1678
 
1679
======================================================================
1679
======================================================================
1680
========= Function 26, subfunction 8 - get used HD partition. ========
1680
========= Function 26, subfunction 8 - get used HD partition. ========
1681
======================================================================
1681
======================================================================
1682
The HD partition defines partition of the hard disk to write with
1682
The HD partition defines partition of the hard disk to write with
1683
usage of obsolete syntax /HD in obsolete function 58;
1683
usage of obsolete syntax /HD in obsolete function 58;
1684
at usage of functions 58 and 70 and modern syntax /HD0,/HD1,/HD2,/HD3
1684
at usage of functions 58 and 70 and modern syntax /HD0,/HD1,/HD2,/HD3
1685
base and partition are set automatically.
1685
base and partition are set automatically.
1686
Parameters:
1686
Parameters:
1687
  * eax = 26 - function number
1687
  * eax = 26 - function number
1688
  * ebx = 8 - subfunction number
1688
  * ebx = 8 - subfunction number
1689
Returned value:
1689
Returned value:
1690
  * eax = HD partition (beginning from 1)
1690
  * eax = HD partition (beginning from 1)
1691
Remarks:
1691
Remarks:
1692
  * Any application in any time can change partition.
1692
  * Any application in any time can change partition.
1693
  * To set partition use subfunction 8 of function 21.
1693
  * To set partition use subfunction 8 of function 21.
1694
  * To get number of partitions on a hard disk use
1694
  * To get number of partitions on a hard disk use
1695
    subfunction 11 of function 18.
1695
    subfunction 11 of function 18.
1696
  * To get base of used hard disk, use subfunction 7.
1696
  * To get base of used hard disk, use subfunction 7.
1697
 
1697
 
1698
======================================================================
1698
======================================================================
1699
=== Function 26, subfunction 9 - get the value of the time counter. ==
1699
=== Function 26, subfunction 9 - get the value of the time counter. ==
1700
======================================================================
1700
======================================================================
1701
Parameters:
1701
Parameters:
1702
  * eax = 26 - function number
1702
  * eax = 26 - function number
1703
  * ebx = 9 - subfunction number
1703
  * ebx = 9 - subfunction number
1704
Returned value:
1704
Returned value:
1705
  * eax = number of 1/100s of second, past from the system boot time
1705
  * eax = number of 1/100s of second, past from the system boot time
1706
Remarks:
1706
Remarks:
1707
  * Counter takes modulo 2^32, that correspond to a little more
1707
  * Counter takes modulo 2^32, that correspond to a little more
1708
    than 497 days.
1708
    than 497 days.
1709
  * To get system time use function 3.
1709
  * To get system time use function 3.
1710
 
1710
 
1711
======================================================================
1711
======================================================================
1712
===================== Function 26, subfunction 11 ====================
1712
===================== Function 26, subfunction 11 ====================
1713
========== Find out whether low-level HD access is enabled. ==========
1713
========== Find out whether low-level HD access is enabled. ==========
1714
======================================================================
1714
======================================================================
1715
Parameters:
1715
Parameters:
1716
  * eax = 26 - function number
1716
  * eax = 26 - function number
1717
  * ebx = 11 - subfunction number
1717
  * ebx = 11 - subfunction number
1718
Returned value:
1718
Returned value:
1719
  * eax = 0/1 - disabled/enabled
1719
  * eax = 0/1 - disabled/enabled
1720
Remarks:
1720
Remarks:
1721
  * Is used in LBA read (subfunction 8 of function 58).
1721
  * Is used in LBA read (subfunction 8 of function 58).
1722
  * To set current state use subfunction 11 of function 21.
1722
  * To set current state use subfunction 11 of function 21.
1723
 
1723
 
1724
======================================================================
1724
======================================================================
1725
===================== Function 26, subfunction 12 ====================
1725
===================== Function 26, subfunction 12 ====================
1726
========== Find out whether low-level PCI access is enabled. =========
1726
========== Find out whether low-level PCI access is enabled. =========
1727
======================================================================
1727
======================================================================
1728
Parameters:
1728
Parameters:
1729
  * eax = 26 - function number
1729
  * eax = 26 - function number
1730
  * ebx = 12 - subfunction number
1730
  * ebx = 12 - subfunction number
1731
Returned value:
1731
Returned value:
1732
  * eax = 0/1 - disabled/enabled
1732
  * eax = 0/1 - disabled/enabled
1733
Remarks:
1733
Remarks:
1734
  * Is used by operations with PCI bus (function 62).
1734
  * Is used by operations with PCI bus (function 62).
1735
  * The current implementation uses only low bit of ecx.
1735
  * The current implementation uses only low bit of ecx.
1736
  * To set the current state use subfunction 12 of function 21.
1736
  * To set the current state use subfunction 12 of function 21.
1737
 
1737
 
1738
======================================================================
1738
======================================================================
1739
=================== Function 29 - get system date. ===================
1739
=================== Function 29 - get system date. ===================
1740
======================================================================
1740
======================================================================
1741
Parameters:
1741
Parameters:
1742
  * eax = 29 - function number
1742
  * eax = 29 - function number
1743
Returned value:
1743
Returned value:
1744
  * eax = 0x00DDMMYY, where
1744
  * eax = 0x00DDMMYY, where
1745
    (binary-decimal coding, BCD, is used)
1745
    (binary-decimal coding, BCD, is used)
1746
  * YY = two low digits of year (00..99)
1746
  * YY = two low digits of year (00..99)
1747
  * MM = month (01..12)
1747
  * MM = month (01..12)
1748
  * DD = day (01..31)
1748
  * DD = day (01..31)
1749
Remarks:
1749
Remarks:
1750
  * To set system date use function 22.
1750
  * To set system date use function 22.
1751
 
1751
 
1752
======================================================================
1752
======================================================================
1753
============= Function 30 - work with the current folder. ============
1753
============= Function 30 - work with the current folder. ============
1754
======================================================================
1754
======================================================================
1755
 
1755
 
1756
--------- Subfunction 1 - set current folder for the thread. ---------
1756
--------- Subfunction 1 - set current folder for the thread. ---------
1757
Parameters:
1757
Parameters:
1758
  * eax = 30 - function number
1758
  * eax = 30 - function number
1759
  * ebx = 1 - subfunction number
1759
  * ebx = 1 - subfunction number
1760
  * ecx = pointer to ASCIIZ-string with the path to new current folder
1760
  * ecx = pointer to ASCIIZ-string with the path to new current folder
1761
Returned value:
1761
Returned value:
1762
  * function does not return value
1762
  * function does not return value
1763
 
1763
 
1764
--------- Subfunction 2 - get current folder for the thread. ---------
1764
--------- Subfunction 2 - get current folder for the thread. ---------
1765
Parameters:
1765
Parameters:
1766
  * eax = 30 - function number
1766
  * eax = 30 - function number
1767
  * ebx = 2 - subfunction number
1767
  * ebx = 2 - subfunction number
1768
  * ecx = pointer to buffer
1768
  * ecx = pointer to buffer
1769
  * edx = size of buffer
1769
  * edx = size of buffer
1770
Returned value:
1770
Returned value:
1771
  * eax = size of the current folder's name (including terminating 0)
1771
  * eax = size of the current folder's name (including terminating 0)
1772
Remarks:
1772
Remarks:
1773
  * If the buffer is too small to hold all data, only first (edx-1)
1773
  * If the buffer is too small to hold all data, only first (edx-1)
1774
    bytes are copied and than terminating 0 is inserted.
1774
    bytes are copied and than terminating 0 is inserted.
1775
  * By default, current folder for the thread is "/rd/1".
1775
  * By default, current folder for the thread is "/rd/1".
1776
  * At process/thread creation the current folder will be inherited
1776
  * At process/thread creation the current folder will be inherited
1777
    from the parent.
1777
    from the parent.
1778
 
1778
 
1779
--- Subfunction 3 - install the add.system directory for the kernel --
1779
--- Subfunction 3 - install the add.system directory for the kernel --
1780
Parameters:
1780
Parameters:
1781
  * eax = 30 - function number
1781
  * eax = 30 - function number
1782
  * ebx = 3 - subfunction number
1782
  * ebx = 3 - subfunction number
1783
  * ecx = pointer to a block of data:
1783
  * ecx = pointer to a block of data:
1784
          sysdir_name     rb 64
1784
          sysdir_name     rb 64
1785
          sysdir_path     rb 64
1785
          sysdir_path     rb 64
1786
For example:
1786
For example:
1787
dir_name1       db 'KolibriOS',0
1787
dir_name1       db 'KolibriOS',0
1788
                rb 64-8
1788
                rb 64-8
1789
dir_path1       db 'HD0/1',0
1789
dir_path1       db 'HD0/1',0
1790
                rb 64-6
1790
                rb 64-6
1791
Returned value:
1791
Returned value:
1792
  * function does not return value
1792
  * function does not return value
1793
Remarks:
1793
Remarks:
1794
  * The function can be called only 1 time for 1 session of the OS.
1794
  * The function can be called only 1 time for 1 session of the OS.
1795
 
1795
 
1796
======================================================================
1796
======================================================================
1797
========= Function 34 - who owner the pixel on the screen. ===========
1797
========= Function 34 - who owner the pixel on the screen. ===========
1798
======================================================================
1798
======================================================================
1799
Parameters:
1799
Parameters:
1800
  * eax = 34 - function number
1800
  * eax = 34 - function number
1801
  * ebx = x-coordinate (relative to the display)
1801
  * ebx = x-coordinate (relative to the display)
1802
  * ecx = y-coordinate (relative to the display)
1802
  * ecx = y-coordinate (relative to the display)
1803
 
1803
 
1804
Returned value:
1804
Returned value:
1805
  * eax = 0x000000XX - owner of pixel the slot window N
1805
  * eax = 0x000000XX - owner of pixel the slot window N
1806
    If incorrect values ebx and ecx then function returns 0
1806
    If incorrect values ebx and ecx then function returns 0
1807
  * The function takes the value from the area [_WinMapAddress]
1807
  * The function takes the value from the area [_WinMapAddress]
1808
 
1808
 
1809
======================================================================
1809
======================================================================
1810
======= Function 35 - read the color of a pixel on the screen. =======
1810
======= Function 35 - read the color of a pixel on the screen. =======
1811
======================================================================
1811
======================================================================
1812
Parameters:
1812
Parameters:
1813
  * eax = 35
1813
  * eax = 35
1814
  * ebx = y*xsize+x, where
1814
  * ebx = y*xsize+x, where
1815
  * (x,y) = coordinates of a pixel (beginning from 0)
1815
  * (x,y) = coordinates of a pixel (beginning from 0)
1816
  * xsize = horizontal screen size
1816
  * xsize = horizontal screen size
1817
Returned value:
1817
Returned value:
1818
  * eax = color 0x00RRGGBB
1818
  * eax = color 0x00RRGGBB
1819
Remarks:
1819
Remarks:
1820
  * To get screen sizes use function 14. Pay attention,
1820
  * To get screen sizes use function 14. Pay attention,
1821
    that it subtracts 1 from both sizes.
1821
    that it subtracts 1 from both sizes.
1822
  * There is also direct access (without any system calls)
1822
  * There is also direct access (without any system calls)
1823
    to videomemory through the selector gs. To get parameters of
1823
    to videomemory through the selector gs. To get parameters of
1824
    the current videomode, use function 61.
1824
    the current videomode, use function 61.
1825
 
1825
 
1826
======================================================================
1826
======================================================================
1827
=================== Function 36 - read screen area. ==================
1827
=================== Function 36 - read screen area. ==================
1828
======================================================================
1828
======================================================================
1829
Paramters:
1829
Paramters:
1830
  * eax = 36 - function number
1830
  * eax = 36 - function number
1831
  * ebx = pointer to the previously allocated memory area,
1831
  * ebx = pointer to the previously allocated memory area,
1832
        where will be placed the image in the format BBGGRRBBGGRR...
1832
        where will be placed the image in the format BBGGRRBBGGRR...
1833
  * ecx = [size on axis x]*65536 + [size on axis y]
1833
  * ecx = [size on axis x]*65536 + [size on axis y]
1834
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1834
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
1835
Returned value:
1835
Returned value:
1836
  * function does not return value
1836
  * function does not return value
1837
Remarks:
1837
Remarks:
1838
  * Coordinates of the image are coordinates of the upper left corner
1838
  * Coordinates of the image are coordinates of the upper left corner
1839
    of the image relative to the screen.
1839
    of the image relative to the screen.
1840
  * Size of the image in bytes is 3*xsize*ysize.
1840
  * Size of the image in bytes is 3*xsize*ysize.
1841
 
1841
 
1842
======================================================================
1842
======================================================================
1843
=================== Function 37 - work with mouse. ===================
1843
=================== Function 37 - work with mouse. ===================
1844
======================================================================
1844
======================================================================
1845
 
1845
 
1846
---------- Subfunction 0 - screen coordinates of the mouse -----------
1846
---------- Subfunction 0 - screen coordinates of the mouse -----------
1847
Parameters:
1847
Parameters:
1848
  * eax = 37 - function number
1848
  * eax = 37 - function number
1849
  * ebx = 0 - subfunction number
1849
  * ebx = 0 - subfunction number
1850
Returned value:
1850
Returned value:
1851
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1851
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1852
    (beginning from 0)
1852
    (beginning from 0)
1853
 
1853
 
1854
-- Subfunction 1 - coordinates of the mouse relative to the window ---
1854
-- Subfunction 1 - coordinates of the mouse relative to the window ---
1855
Parameters:
1855
Parameters:
1856
  * eax = 37 - function number
1856
  * eax = 37 - function number
1857
  * ebx = 1 - subfunction number
1857
  * ebx = 1 - subfunction number
1858
Returned value:
1858
Returned value:
1859
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1859
  * eax = x*65536 + y, (x,y)=coordinates of the mouse pointer
1860
    relative to the application window (beginning from 0)
1860
    relative to the application window (beginning from 0)
1861
Remarks:
1861
Remarks:
1862
  * The value is calculated by formula (x-xwnd)*65536 + (y-ywnd).
1862
  * The value is calculated by formula (x-xwnd)*65536 + (y-ywnd).
1863
    If y>=ywnd, the low word is non-negative and contains
1863
    If y>=ywnd, the low word is non-negative and contains
1864
    relative y-coordinate, and the high word - relative x-coordinate
1864
    relative y-coordinate, and the high word - relative x-coordinate
1865
    (with correct sign). Otherwise the low word is negative and still
1865
    (with correct sign). Otherwise the low word is negative and still
1866
    contains relative y-coordinate, and to the high word
1866
    contains relative y-coordinate, and to the high word
1867
    1 should be added.
1867
    1 should be added.
1868
 
1868
 
1869
------------ Subfunction 2 - pressed buttons of the mouse ------------
1869
------------ Subfunction 2 - pressed buttons of the mouse ------------
1870
Parameters:
1870
Parameters:
1871
  * eax = 37 - function number
1871
  * eax = 37 - function number
1872
  * ebx = 2 - subfunction number
1872
  * ebx = 2 - subfunction number
1873
Returned value:
1873
Returned value:
1874
  * eax contains information on the pressed mouse buttons:
1874
  * eax contains information on the pressed mouse buttons:
1875
  * bit 0 is set = left button is pressed
1875
  * bit 0 is set = left button is pressed
1876
  * bit 1 is set = right button is pressed
1876
  * bit 1 is set = right button is pressed
1877
  * bit 2 is set = middle button is pressed
1877
  * bit 2 is set = middle button is pressed
1878
  * bit 3 is set = 4th button is pressed
1878
  * bit 3 is set = 4th button is pressed
1879
  * bit 4 is set = 5th button is pressed
1879
  * bit 4 is set = 5th button is pressed
1880
  * other bits are cleared
1880
  * other bits are cleared
1881
 
1881
 
1882
-------------------- Subfunction 4 - load cursor ---------------------
1882
-------------------- Subfunction 4 - load cursor ---------------------
1883
Parameters:
1883
Parameters:
1884
  * eax = 37 - function number
1884
  * eax = 37 - function number
1885
  * ebx = 4 - subfunction number
1885
  * ebx = 4 - subfunction number
1886
  * dx = data source:
1886
  * dx = data source:
1887
  * dx = LOAD_FROM_FILE = 0 - data in a file
1887
  * dx = LOAD_FROM_FILE = 0 - data in a file
1888
    * ecx = pointer to full path to the cursor file
1888
    * ecx = pointer to full path to the cursor file
1889
    * the file must be in the format .cur, which is standard for
1889
    * the file must be in the format .cur, which is standard for
1890
      MS Windows, at that of the size 32*32 pixels
1890
      MS Windows, at that of the size 32*32 pixels
1891
  * dx = LOAD_FROM_MEM = 1 - data of file are already loaded in memory
1891
  * dx = LOAD_FROM_MEM = 1 - data of file are already loaded in memory
1892
    * ecx = pointer to data of the cursor file
1892
    * ecx = pointer to data of the cursor file
1893
    * the data format is the same as in the previous case
1893
    * the data format is the same as in the previous case
1894
  * dx = LOAD_INDIRECT = 2 - data in memory
1894
  * dx = LOAD_INDIRECT = 2 - data in memory
1895
    * ecx = pointer to cursor image in the format ARGB 32*32 pixels
1895
    * ecx = pointer to cursor image in the format ARGB 32*32 pixels
1896
    * edx = 0xXXYY0002, where
1896
    * edx = 0xXXYY0002, where
1897
      * XX = x-coordinate of cursor hotspot
1897
      * XX = x-coordinate of cursor hotspot
1898
      * YY = y-coordinate
1898
      * YY = y-coordinate
1899
      * 0 <= XX, YY <= 31
1899
      * 0 <= XX, YY <= 31
1900
Returned value:
1900
Returned value:
1901
  * eax = 0 - failed
1901
  * eax = 0 - failed
1902
  * otherwise eax = cursor handle
1902
  * otherwise eax = cursor handle
1903
 
1903
 
1904
--------------------- Subfunction 5 - set cursor ---------------------
1904
--------------------- Subfunction 5 - set cursor ---------------------
1905
Sets new cursor for the window of the current thread.
1905
Sets new cursor for the window of the current thread.
1906
Parameters:
1906
Parameters:
1907
  * eax = 37 - function number
1907
  * eax = 37 - function number
1908
  * ebx = 5 - subfunction number
1908
  * ebx = 5 - subfunction number
1909
  * ecx = cursor handle
1909
  * ecx = cursor handle
1910
Returned value:
1910
Returned value:
1911
  * eax = handle of previous cursor
1911
  * eax = handle of previous cursor
1912
Remarks:
1912
Remarks:
1913
  * If the handle is incorrect, the function restores the default
1913
  * If the handle is incorrect, the function restores the default
1914
    cursor (standard arrow). In particular, ecx=0 restores it.
1914
    cursor (standard arrow). In particular, ecx=0 restores it.
1915
 
1915
 
1916
------------------- Subfunction 6 - delete cursor --------------------
1916
------------------- Subfunction 6 - delete cursor --------------------
1917
Parameters:
1917
Parameters:
1918
  * eax = 37 - function number
1918
  * eax = 37 - function number
1919
  * ebx = 6 - subfunction number
1919
  * ebx = 6 - subfunction number
1920
  * ecx = cursor handle
1920
  * ecx = cursor handle
1921
Returned value:
1921
Returned value:
1922
  * eax destroyed
1922
  * eax destroyed
1923
Remarks:
1923
Remarks:
1924
  * The cursor must be loaded previously by the current thread
1924
  * The cursor must be loaded previously by the current thread
1925
    (with the call to subfunction 4). The function does not delete
1925
    (with the call to subfunction 4). The function does not delete
1926
    system cursors and cursors, loaded by another applications.
1926
    system cursors and cursors, loaded by another applications.
1927
  * If the active cursor (set by subfunction 5) is deleted,
1927
  * If the active cursor (set by subfunction 5) is deleted,
1928
    the system restores the default cursor (standard arrow).
1928
    the system restores the default cursor (standard arrow).
1929
 
1929
 
1930
------------------ Subfunction 7 - get scroll data -------------------
1930
------------------ Subfunction 7 - get scroll data -------------------
1931
Parameters:
1931
Parameters:
1932
  * eax = 37 - function number
1932
  * eax = 37 - function number
1933
  * ebx = 7 - subfunction number
1933
  * ebx = 7 - subfunction number
1934
Returned value:
1934
Returned value:
1935
  * eax = [horizontal offset]*65536 + [vertical offset]
1935
  * eax = [horizontal offset]*65536 + [vertical offset]
1936
Remarks:
1936
Remarks:
1937
  * Scroll data is available for active window only.
1937
  * Scroll data is available for active window only.
1938
  * Values are zeroed after reading.
1938
  * Values are zeroed after reading.
1939
  * Values are signed.
1939
  * Values are signed.
1940
 
1940
 
1941
======================================================================
1941
======================================================================
1942
====================== Function 38 - draw line. ======================
1942
====================== Function 38 - draw line. ======================
1943
======================================================================
1943
======================================================================
1944
Parameters:
1944
Parameters:
1945
  * eax = 38 - function number
1945
  * eax = 38 - function number
1946
  * ebx = [start coordinate on axis x]*65536 +
1946
  * ebx = [start coordinate on axis x]*65536 +
1947
              [end coordinate on axis x]
1947
              [end coordinate on axis x]
1948
  * ecx = [start coordinate on axis y]*65536 +
1948
  * ecx = [start coordinate on axis y]*65536 +
1949
              [end coordinate on axis y]
1949
              [end coordinate on axis y]
1950
  * edx = 0x00RRGGBB - color
1950
  * edx = 0x00RRGGBB - color
1951
    edx = 0x01xxxxxx - draw inversed line
1951
    edx = 0x01xxxxxx - draw inversed line
1952
          (low 24 bits are ignored)
1952
          (low 24 bits are ignored)
1953
Returned value:
1953
Returned value:
1954
  * function does not return value
1954
  * function does not return value
1955
Remarks:
1955
Remarks:
1956
  * Coordinates are relative to the window.
1956
  * Coordinates are relative to the window.
1957
  * End point is also drawn.
1957
  * End point is also drawn.
1958
 
1958
 
1959
======================================================================
1959
======================================================================
1960
== Function 39, subfunction 1 - get a size of the background image. ==
1960
== Function 39, subfunction 1 - get a size of the background image. ==
1961
======================================================================
1961
======================================================================
1962
Parameters:
1962
Parameters:
1963
  * eax = 39 - function number
1963
  * eax = 39 - function number
1964
  * ebx = 1 - subfunction number
1964
  * ebx = 1 - subfunction number
1965
Returned value:
1965
Returned value:
1966
  * eax = [width]*65536 + [height]
1966
  * eax = [width]*65536 + [height]
1967
Remarks:
1967
Remarks:
1968
  * There is a pair function to set sizes of background image -
1968
  * There is a pair function to set sizes of background image -
1969
    subfunction 1 of function 15. After which it is necessary,
1969
    subfunction 1 of function 15. After which it is necessary,
1970
    of course, anew to define image.
1970
    of course, anew to define image.
1971
 
1971
 
1972
======================================================================
1972
======================================================================
1973
== Function 39, subfunction 2 - get pixel from the background image. =
1973
== Function 39, subfunction 2 - get pixel from the background image. =
1974
======================================================================
1974
======================================================================
1975
Parameters:
1975
Parameters:
1976
  * eax = 39 - function number
1976
  * eax = 39 - function number
1977
  * ebx = 2 - subfunction number
1977
  * ebx = 2 - subfunction number
1978
  * ecx = offset
1978
  * ecx = offset
1979
Returned value:
1979
Returned value:
1980
  * eax = 0x00RRGGBB - pixel color, if offset is valid
1980
  * eax = 0x00RRGGBB - pixel color, if offset is valid
1981
    (less than 0x160000-16)
1981
    (less than 0x160000-16)
1982
  * eax = 2 otherwise
1982
  * eax = 2 otherwise
1983
Remarks:
1983
Remarks:
1984
  * Do not rely on returned value for invalid offsets, it may be
1984
  * Do not rely on returned value for invalid offsets, it may be
1985
    changed in future kernel versions.
1985
    changed in future kernel versions.
1986
  * Offset for pixel with coordinates (x,y)
1986
  * Offset for pixel with coordinates (x,y)
1987
    is calculated as (x+y*xsize)*3.
1987
    is calculated as (x+y*xsize)*3.
1988
  * There is a pair function to set pixel on the background image -
1988
  * There is a pair function to set pixel on the background image -
1989
    subfunction 2 of function 15.
1989
    subfunction 2 of function 15.
1990
 
1990
 
1991
======================================================================
1991
======================================================================
1992
== Function 39, subfunction 4 - get drawing mode for the background. =
1992
== Function 39, subfunction 4 - get drawing mode for the background. =
1993
======================================================================
1993
======================================================================
1994
Parameters:
1994
Parameters:
1995
  * eax = 39 - function number
1995
  * eax = 39 - function number
1996
  * ebx = 4 - subfunction number
1996
  * ebx = 4 - subfunction number
1997
Returned value:
1997
Returned value:
1998
  * eax = 1 - tile
1998
  * eax = 1 - tile
1999
  * eax = 2 - stretch
1999
  * eax = 2 - stretch
2000
Remarks:
2000
Remarks:
2001
  * There is a pair function to set drawing mode -
2001
  * There is a pair function to set drawing mode -
2002
    subfunction 4 of function 15.
2002
    subfunction 4 of function 15.
2003
 
2003
 
2004
======================================================================
2004
======================================================================
2005
=========== Function 40 - set the mask for expected events. ==========
2005
=========== Function 40 - set the mask for expected events. ==========
2006
======================================================================
2006
======================================================================
2007
The mask for expected events affects function working with events
2007
The mask for expected events affects function working with events
2008
10, 11, 23 - they notify only about events allowed by this mask.
2008
10, 11, 23 - they notify only about events allowed by this mask.
2009
Parameters:
2009
Parameters:
2010
  * eax = 40 - function number
2010
  * eax = 40 - function number
2011
  * ebx = mask: bit i corresponds to event i+1 (see list of events)
2011
  * ebx = mask: bit i corresponds to event i+1 (see list of events)
2012
    (set bit permits notice on event)
2012
    (set bit permits notice on event)
2013
    bit 31: active/inactive filter
2013
    bit 31: active/inactive filter
2014
    bit 31 = 0 - inactive window receive mouse events
2014
    bit 31 = 0 - inactive window receive mouse events
2015
    bit 31 = 1 - inactive window does not receive mouse events
2015
    bit 31 = 1 - inactive window does not receive mouse events
2016
    bit 30: cursor position filter
2016
    bit 30: cursor position filter
2017
    bit 30 = 0 = the window receive mouse events if cursor
2017
    bit 30 = 0 = the window receive mouse events if cursor
2018
                 outside window
2018
                 outside window
2019
    bit 30 = 1 - the window does not receive mouse events if cursor
2019
    bit 30 = 1 - the window does not receive mouse events if cursor
2020
                 outside window
2020
                 outside window
2021
Returned value:
2021
Returned value:
2022
  * eax = previous value of mask
2022
  * eax = previous value of mask
2023
Remarks:
2023
Remarks:
2024
  * Default mask (7=111b) enables nofices about redraw,
2024
  * Default mask (7=111b) enables nofices about redraw,
2025
    keys and buttons. This is enough for many applications.
2025
    keys and buttons. This is enough for many applications.
2026
  * Events prohibited in the mask are saved anyway, when come;
2026
  * Events prohibited in the mask are saved anyway, when come;
2027
    they are simply not informed with event functions.
2027
    they are simply not informed with event functions.
2028
  * Event functions take into account the mask on moment of
2028
  * Event functions take into account the mask on moment of
2029
    function call, not on moment of event arrival.
2029
    function call, not on moment of event arrival.
2030
 
2030
 
2031
 
2031
 
2032
======================================================================
2032
======================================================================
2033
================ Function 43 - input/output to a port. ===============
2033
================ Function 43 - input/output to a port. ===============
2034
======================================================================
2034
======================================================================
2035
 
2035
 
2036
------------------------ Output data to port -------------------------
2036
------------------------ Output data to port -------------------------
2037
Parameters:
2037
Parameters:
2038
  * eax = 43 - function number
2038
  * eax = 43 - function number
2039
  * bl = byte for output
2039
  * bl = byte for output
2040
  * ecx = port number 0xnnnn (from 0 to 0xFFFF)
2040
  * ecx = port number 0xnnnn (from 0 to 0xFFFF)
2041
Returned value:
2041
Returned value:
2042
  * eax = 0 - success
2042
  * eax = 0 - success
2043
  * eax = 1 - the thread has not reserved the selected port
2043
  * eax = 1 - the thread has not reserved the selected port
2044
 
2044
 
2045
------------------------ Input data from port ------------------------
2045
------------------------ Input data from port ------------------------
2046
Parameters:
2046
Parameters:
2047
  * eax = 43 - function number
2047
  * eax = 43 - function number
2048
  * ebx is ignored
2048
  * ebx is ignored
2049
  * ecx = 0x8000nnnn, where nnnn = port number (from 0 to 0xFFFF)
2049
  * ecx = 0x8000nnnn, where nnnn = port number (from 0 to 0xFFFF)
2050
Returned value:
2050
Returned value:
2051
  * eax = 0 - success, thus ebx = entered byte
2051
  * eax = 0 - success, thus ebx = entered byte
2052
  * eax = 1 - the thread has not reserved the selected port
2052
  * eax = 1 - the thread has not reserved the selected port
2053
Remarks:
2053
Remarks:
2054
  * Previously the thread must reserve the selected port
2054
  * Previously the thread must reserve the selected port
2055
    for itself by function 46.
2055
    for itself by function 46.
2056
  * Instead of call to this function it is better to use
2056
  * Instead of call to this function it is better to use
2057
    processor instructions in/out - this is much
2057
    processor instructions in/out - this is much
2058
    faster and a bit shorter and easier.
2058
    faster and a bit shorter and easier.
2059
 
2059
 
2060
 
2060
 
2061
======================================================================
2061
======================================================================
2062
====== Function 46 - reserve/free a group of input/output ports. =====
2062
====== Function 46 - reserve/free a group of input/output ports. =====
2063
======================================================================
2063
======================================================================
2064
To work with reserved ports an application can access directly by
2064
To work with reserved ports an application can access directly by
2065
commands in/out (recommended way) and can use function 43
2065
commands in/out (recommended way) and can use function 43
2066
(not recommended way).
2066
(not recommended way).
2067
Parameters:
2067
Parameters:
2068
  * eax = 46 - function number
2068
  * eax = 46 - function number
2069
  * ebx = 0 - reserve, 1 - free
2069
  * ebx = 0 - reserve, 1 - free
2070
  * ecx = start port number
2070
  * ecx = start port number
2071
  * edx = end port number (inclusive)
2071
  * edx = end port number (inclusive)
2072
Returned value:
2072
Returned value:
2073
  * eax = 0 - success
2073
  * eax = 0 - success
2074
  * eax = 1 - error
2074
  * eax = 1 - error
2075
Remarks:
2075
Remarks:
2076
  * For ports reservation: an error occurs if and only if
2076
  * For ports reservation: an error occurs if and only if
2077
    one from the following condition satisfies:
2077
    one from the following condition satisfies:
2078
    * start port is more than end port;
2078
    * start port is more than end port;
2079
    * the selected range contains incorrect port number
2079
    * the selected range contains incorrect port number
2080
      (correct are from 0 to 0xFFFF);
2080
      (correct are from 0 to 0xFFFF);
2081
    * limit for the total number of reserved areas is exceeded
2081
    * limit for the total number of reserved areas is exceeded
2082
      (maximum 255 are allowed);
2082
      (maximum 255 are allowed);
2083
    * the selected range intersects with any of earlier reserved
2083
    * the selected range intersects with any of earlier reserved
2084
  * For ports free: an error is an attempt to free range,
2084
  * For ports free: an error is an attempt to free range,
2085
    that was not earlier reserved by this function
2085
    that was not earlier reserved by this function
2086
    (with same ecx,edx).
2086
    (with same ecx,edx).
2087
  * If an error occurs (for both cases) function performs no action.
2087
  * If an error occurs (for both cases) function performs no action.
2088
  * At booting the system reserves for itself ports
2088
  * At booting the system reserves for itself ports
2089
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (inclusively).
2089
    0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (inclusively).
2090
  * When a thread terminates, all reserved by it ports
2090
  * When a thread terminates, all reserved by it ports
2091
    are freed automatically.
2091
    are freed automatically.
2092
 
2092
 
2093
======================================================================
2093
======================================================================
2094
============= Function 47 - draw a number in the window. =============
2094
============= Function 47 - draw a number in the window. =============
2095
======================================================================
2095
======================================================================
2096
Parameters:
2096
Parameters:
2097
  * eax = 47 - function number
2097
  * eax = 47 - function number
2098
  * ebx = parameters of conversion number to text:
2098
  * ebx = parameters of conversion number to text:
2099
    * bl = 0 - ecx contains number
2099
    * bl = 0 - ecx contains number
2100
    * bl = 1 - ecx contains pointer to dword/qword-number
2100
    * bl = 1 - ecx contains pointer to dword/qword-number
2101
    * bh = 0 - display in decimal number system
2101
    * bh = 0 - display in decimal number system
2102
    * bh = 1 - display in hexadecimal system
2102
    * bh = 1 - display in hexadecimal system
2103
    * bh = 2 - display in binary system
2103
    * bh = 2 - display in binary system
2104
    * bits 16-21 = how many digits to display
2104
    * bits 16-21 = how many digits to display
2105
    * bits 22-29 reserved and must be set to 0
2105
    * bits 22-29 reserved and must be set to 0
2106
    * bit 30 set = display qword (64-bit) number (must be bl=1)
2106
    * bit 30 set = display qword (64-bit) number (must be bl=1)
2107
    * bit 31 set = do not display leading zeroes of the number
2107
    * bit 31 set = do not display leading zeroes of the number
2108
  * ecx = number (if bl=0) or pointer (if bl=1)
2108
  * ecx = number (if bl=0) or pointer (if bl=1)
2109
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2109
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2110
  * esi = 0xX0RRGGBB:
2110
  * esi = 0xX0RRGGBB:
2111
    * RR, GG, BB specify the color
2111
    * RR, GG, BB specify the color
2112
    * X = ABnn (bits)
2112
    * X = ABnn (bits)
2113
    * nn = font (0/1)
2113
    * nn = font (0/1)
2114
    * A is ignored
2114
    * A is ignored
2115
    * B=1 - fill background with the color edi
2115
    * B=1 - fill background with the color edi
2116
Returned value:
2116
Returned value:
2117
  * function does not return value
2117
  * function does not return value
2118
Remarks:
2118
Remarks:
2119
  * The given length must not exceed 60.
2119
  * The given length must not exceed 60.
2120
  * The exactly given amount of digits is output. If number is small
2120
  * The exactly given amount of digits is output. If number is small
2121
    and can be written by smaller amount of digits, it is supplemented
2121
    and can be written by smaller amount of digits, it is supplemented
2122
    by leading zeroes; if the number is big and can not be written by
2122
    by leading zeroes; if the number is big and can not be written by
2123
    given amount of digits, extra digits are not drawn.
2123
    given amount of digits, extra digits are not drawn.
2124
  * Parameters of fonts are shown in the description of function 4
2124
  * Parameters of fonts are shown in the description of function 4
2125
    (text output).
2125
    (text output).
2126
 
2126
 
2127
======================================================================
2127
======================================================================
2128
========= Function 48, subfunction 0 - apply screen settings. ========
2128
========= Function 48, subfunction 0 - apply screen settings. ========
2129
======================================================================
2129
======================================================================
2130
Parameters:
2130
Parameters:
2131
  * eax = 48 - function number
2131
  * eax = 48 - function number
2132
  * ebx = 0 - subfunction number
2132
  * ebx = 0 - subfunction number
2133
  * ecx = 0 - reserved
2133
  * ecx = 0 - reserved
2134
Returned value:
2134
Returned value:
2135
  * function does not return value
2135
  * function does not return value
2136
Remarks:
2136
Remarks:
2137
  * Function redraws the screen after parameters change by
2137
  * Function redraws the screen after parameters change by
2138
    subfunctions 1 and 2.
2138
    subfunctions 1 and 2.
2139
  * Function call without prior call to one of indicated subfunctions
2139
  * Function call without prior call to one of indicated subfunctions
2140
    is ignored.
2140
    is ignored.
2141
  * Function call with nonzero ecx is ignored.
2141
  * Function call with nonzero ecx is ignored.
2142
 
2142
 
2143
======================================================================
2143
======================================================================
2144
=========== Function 48, subfunction 1 - set button style. ===========
2144
=========== Function 48, subfunction 1 - set button style. ===========
2145
======================================================================
2145
======================================================================
2146
Parameters:
2146
Parameters:
2147
  * eax = 48 - function number
2147
  * eax = 48 - function number
2148
  * ebx = 1 - subfunction number
2148
  * ebx = 1 - subfunction number
2149
  * ecx = button style:
2149
  * ecx = button style:
2150
    * 0 = flat
2150
    * 0 = flat
2151
    * 1 = 3d
2151
    * 1 = 3d
2152
Returned value:
2152
Returned value:
2153
  * function does not return value
2153
  * function does not return value
2154
Remarks:
2154
Remarks:
2155
  * After call to this function one should redraw the screen by
2155
  * After call to this function one should redraw the screen by
2156
    subfunction 0.
2156
    subfunction 0.
2157
  * Button style influences only to their draw of function 8.
2157
  * Button style influences only to their draw of function 8.
2158
 
2158
 
2159
======================================================================
2159
======================================================================
2160
====== Function 48, subfunction 2 - set standard window colors. ======
2160
====== Function 48, subfunction 2 - set standard window colors. ======
2161
======================================================================
2161
======================================================================
2162
Parameters:
2162
Parameters:
2163
  * eax = 48 - function number
2163
  * eax = 48 - function number
2164
  * ebx = 2 - subfunction number
2164
  * ebx = 2 - subfunction number
2165
  * ecx = pointer to the color table
2165
  * ecx = pointer to the color table
2166
  * edx = size of the color table
2166
  * edx = size of the color table
2167
    (must be 40 bytes for future compatibility)
2167
    (must be 40 bytes for future compatibility)
2168
Format of the color table is shown in description of subfunction 3.
2168
Format of the color table is shown in description of subfunction 3.
2169
Returned value:
2169
Returned value:
2170
  * function does not return value
2170
  * function does not return value
2171
Remarks:
2171
Remarks:
2172
  * After call to this function one should redraw the screen by
2172
  * After call to this function one should redraw the screen by
2173
    subfunction 0.
2173
    subfunction 0.
2174
  * Table of standard colors influences only to applications,
2174
  * Table of standard colors influences only to applications,
2175
    which receive this table obviously (by subfunction 3)
2175
    which receive this table obviously (by subfunction 3)
2176
    and use it (specifying colors from it to drawing functions).
2176
    and use it (specifying colors from it to drawing functions).
2177
  * Table of standard colors is included in skin and is installed
2177
  * Table of standard colors is included in skin and is installed
2178
    anew with skin installation (by subfunction 8).
2178
    anew with skin installation (by subfunction 8).
2179
  * Color table can be viewed/changed interactively with
2179
  * Color table can be viewed/changed interactively with
2180
    the application 'desktop'.
2180
    the application 'desktop'.
2181
 
2181
 
2182
======================================================================
2182
======================================================================
2183
====== Function 48, subfunction 3 - get standard window colors. ======
2183
====== Function 48, subfunction 3 - get standard window colors. ======
2184
======================================================================
2184
======================================================================
2185
Parameters:
2185
Parameters:
2186
  * eax = 48 - function number
2186
  * eax = 48 - function number
2187
  * ebx = 3 - subfunction number
2187
  * ebx = 3 - subfunction number
2188
  * ecx = pointer to the buffer with size edx bytes,
2188
  * ecx = pointer to the buffer with size edx bytes,
2189
    where table will be written
2189
    where table will be written
2190
  * edx = size of color table
2190
  * edx = size of color table
2191
    (must be 40 bytes for future compatibility)
2191
    (must be 40 bytes for future compatibility)
2192
Returned value:
2192
Returned value:
2193
  * function does not return value
2193
  * function does not return value
2194
Format of the color table:
2194
Format of the color table:
2195
each item is dword-value for color 0x00RRGGBB
2195
each item is dword-value for color 0x00RRGGBB
2196
  * +0: dword: frames - color of frame
2196
  * +0: dword: frames - color of frame
2197
  * +4: dword: grab - color of header
2197
  * +4: dword: grab - color of header
2198
  * +8: dword: grab_button - color of button on header bar
2198
  * +8: dword: grab_button - color of button on header bar
2199
  * +12 = +0xC: dword: grab_button_text - color of text on button
2199
  * +12 = +0xC: dword: grab_button_text - color of text on button
2200
    on header bar
2200
    on header bar
2201
  * +16 = +0x10: dword: grab_text - color of text on header
2201
  * +16 = +0x10: dword: grab_text - color of text on header
2202
  * +20 = +0x14: dword: work - color of working area
2202
  * +20 = +0x14: dword: work - color of working area
2203
  * +24 = +0x18: dword: work_button - color of button in working area
2203
  * +24 = +0x18: dword: work_button - color of button in working area
2204
  * +28 = +0x1C: dword: work_button_text - color of text on button
2204
  * +28 = +0x1C: dword: work_button_text - color of text on button
2205
    in working area
2205
    in working area
2206
  * +32 = +0x20: dword: work_text - color of text in working area
2206
  * +32 = +0x20: dword: work_text - color of text in working area
2207
  * +36 = +0x24: dword: work_graph - color of graphics in working area
2207
  * +36 = +0x24: dword: work_graph - color of graphics in working area
2208
Remarks:
2208
Remarks:
2209
  * Structure of the color table is described in the standard
2209
  * Structure of the color table is described in the standard
2210
    include file 'macros.inc' as 'system_colors'; for example,
2210
    include file 'macros.inc' as 'system_colors'; for example,
2211
    it is possible to write:
2211
    it is possible to write:
2212
    	sc	system_colors		; variable declaration
2212
    	sc	system_colors		; variable declaration
2213
    	...				; somewhere one must call
2213
    	...				; somewhere one must call
2214
    					; this function with ecx=sc
2214
    					; this function with ecx=sc
2215
    	mov	ecx, [sc.work_button_text]	; read text color on
2215
    	mov	ecx, [sc.work_button_text]	; read text color on
2216
    					; buttin in working area
2216
    					; buttin in working area
2217
  * A program itself desides to use or not to use color table.
2217
  * A program itself desides to use or not to use color table.
2218
    For usage program must simply at calls to drawing functions select
2218
    For usage program must simply at calls to drawing functions select
2219
    color taken from the table.
2219
    color taken from the table.
2220
  * At change of the table of standard colors (by subfunction 2 with
2220
  * At change of the table of standard colors (by subfunction 2 with
2221
    the subsequent application of changes by subfunction 0 or
2221
    the subsequent application of changes by subfunction 0 or
2222
    at skin set by subfunction 8) the system sends to all windows
2222
    at skin set by subfunction 8) the system sends to all windows
2223
    redraw message (the event with code 1).
2223
    redraw message (the event with code 1).
2224
  * Color table can be viewed/changed interactively with
2224
  * Color table can be viewed/changed interactively with
2225
    the application 'desktop'.
2225
    the application 'desktop'.
2226
 
2226
 
2227
======================================================================
2227
======================================================================
2228
============ Function 48, subfunction 4 - get skin height. ===========
2228
============ Function 48, subfunction 4 - get skin height. ===========
2229
======================================================================
2229
======================================================================
2230
Parameters:
2230
Parameters:
2231
  * eax = 48 - function number
2231
  * eax = 48 - function number
2232
  * ebx = 4 - subfunction number
2232
  * ebx = 4 - subfunction number
2233
Returned value:
2233
Returned value:
2234
  * eax = skin height
2234
  * eax = skin height
2235
Remarks:
2235
Remarks:
2236
  * Skin height is defined as the height of a header
2236
  * Skin height is defined as the height of a header
2237
    of skinned windows.
2237
    of skinned windows.
2238
  * See also general structure of window in the description
2238
  * See also general structure of window in the description
2239
    of function 0.
2239
    of function 0.
2240
 
2240
 
2241
======================================================================
2241
======================================================================
2242
======== Function 48, subfunction 5 - get screen working area. =======
2242
======== Function 48, subfunction 5 - get screen working area. =======
2243
======================================================================
2243
======================================================================
2244
Parameters:
2244
Parameters:
2245
  * eax = 48 - function number
2245
  * eax = 48 - function number
2246
  * ebx = 5 - subfunction number
2246
  * ebx = 5 - subfunction number
2247
Returned value:
2247
Returned value:
2248
  * eax = [left]*65536 + [right]
2248
  * eax = [left]*65536 + [right]
2249
  * ebx = [top]*65536 + [bottom]
2249
  * ebx = [top]*65536 + [bottom]
2250
Remarks:
2250
Remarks:
2251
  * The screen working area defines position and coordinates of
2251
  * The screen working area defines position and coordinates of
2252
    a maximized window.
2252
    a maximized window.
2253
  * The screen working area in view of normal work is all screen
2253
  * The screen working area in view of normal work is all screen
2254
    without system panel (the application '@panel').
2254
    without system panel (the application '@panel').
2255
  * (left,top) are coordinates of the left upper corner,
2255
  * (left,top) are coordinates of the left upper corner,
2256
    (right,bottom) are coordinates of the right lower one.
2256
    (right,bottom) are coordinates of the right lower one.
2257
    Thus the size of working area on x axis can be calculated by
2257
    Thus the size of working area on x axis can be calculated by
2258
    formula right-left+1, on y axis - by formula bottom-right+1.
2258
    formula right-left+1, on y axis - by formula bottom-right+1.
2259
  * See also function 14,
2259
  * See also function 14,
2260
    to get sizes of all screen.
2260
    to get sizes of all screen.
2261
  * There is a pair function to set working area - subfunction 6.
2261
  * There is a pair function to set working area - subfunction 6.
2262
 
2262
 
2263
======================================================================
2263
======================================================================
2264
======== Function 48, subfunction 6 - set screen working area. =======
2264
======== Function 48, subfunction 6 - set screen working area. =======
2265
======================================================================
2265
======================================================================
2266
Parameters:
2266
Parameters:
2267
  * eax = 48 - function number
2267
  * eax = 48 - function number
2268
  * ebx = 6 - subfunction number
2268
  * ebx = 6 - subfunction number
2269
  * ecx = [left]*65536 + [right]
2269
  * ecx = [left]*65536 + [right]
2270
  * edx = [top]*65536 + [bottom]
2270
  * edx = [top]*65536 + [bottom]
2271
Returned value:
2271
Returned value:
2272
  * function does not return value
2272
  * function does not return value
2273
Remarks:
2273
Remarks:
2274
  * The screen working area defines position and coordinates of
2274
  * The screen working area defines position and coordinates of
2275
    a maximized window.
2275
    a maximized window.
2276
  * This function is used only by the application '@panel',
2276
  * This function is used only by the application '@panel',
2277
    which set working area to all screen without system panel.
2277
    which set working area to all screen without system panel.
2278
  * (left,top) are coordinates of the left upper corner,
2278
  * (left,top) are coordinates of the left upper corner,
2279
    (right,bottom) are coordinates of the right lower one.
2279
    (right,bottom) are coordinates of the right lower one.
2280
    Thus the size of working area on x axis can be calculated by
2280
    Thus the size of working area on x axis can be calculated by
2281
    formula right-left+1, on y axis - by formula bottom-right+1.
2281
    formula right-left+1, on y axis - by formula bottom-right+1.
2282
  * If 'left'>='right', x-coordinate of working area is not changed.
2282
  * If 'left'>='right', x-coordinate of working area is not changed.
2283
    If 'left'<0, 'left' will not be set. If 'right' is greater than or
2283
    If 'left'<0, 'left' will not be set. If 'right' is greater than or
2284
    equal to screen width, 'right' will not be set.
2284
    equal to screen width, 'right' will not be set.
2285
    Similarly on y axis.
2285
    Similarly on y axis.
2286
  * See also function 14,
2286
  * See also function 14,
2287
    to get sizes of all screen.
2287
    to get sizes of all screen.
2288
  * There is a pair function to get working area - subfunction 5.
2288
  * There is a pair function to get working area - subfunction 5.
2289
  * This function redraws the screen automatically,
2289
  * This function redraws the screen automatically,
2290
    updating coordinates and sizes of maximized windows.
2290
    updating coordinates and sizes of maximized windows.
2291
    The system sends to all windows redraw message (the event 1).
2291
    The system sends to all windows redraw message (the event 1).
2292
 
2292
 
2293
======================================================================
2293
======================================================================
2294
=========== Function 48, subfunction 7 - get skin margins. ===========
2294
=========== Function 48, subfunction 7 - get skin margins. ===========
2295
======================================================================
2295
======================================================================
2296
Returns the area of a header of a skinned window, intended for
2296
Returns the area of a header of a skinned window, intended for
2297
a text of a header.
2297
a text of a header.
2298
Parameters:
2298
Parameters:
2299
  * eax = 48 - function number
2299
  * eax = 48 - function number
2300
  * ebx = 7 - subfunction number
2300
  * ebx = 7 - subfunction number
2301
Returned value:
2301
Returned value:
2302
  * eax = [left]*65536 + [right]
2302
  * eax = [left]*65536 + [right]
2303
  * ebx = [top]*65536 + [bottom]
2303
  * ebx = [top]*65536 + [bottom]
2304
Remarks:
2304
Remarks:
2305
  * An application decides itself to use or not to use this function.
2305
  * An application decides itself to use or not to use this function.
2306
  * It is recommended to take into account returned value
2306
  * It is recommended to take into account returned value
2307
    of this function for choice of a place for drawing header text
2307
    of this function for choice of a place for drawing header text
2308
    (by function 4) or a substitute of header text
2308
    (by function 4) or a substitute of header text
2309
    (at the discretion of an application).
2309
    (at the discretion of an application).
2310
 
2310
 
2311
======================================================================
2311
======================================================================
2312
============= Function 48, subfunction 8 - set used skin. ============
2312
============= Function 48, subfunction 8 - set used skin. ============
2313
======================================================================
2313
======================================================================
2314
Parameters:
2314
Parameters:
2315
  * eax = 48 - function number
2315
  * eax = 48 - function number
2316
  * ebx = 8 - subfunction number
2316
  * ebx = 8 - subfunction number
2317
  * ecx = pointer to a block for function 58, in
2317
  * ecx = pointer to a block for function 58, in
2318
    which the fields of intermediate buffer and file name are filled
2318
    which the fields of intermediate buffer and file name are filled
2319
Returned value:
2319
Returned value:
2320
  * eax = 0 - success
2320
  * eax = 0 - success
2321
  * otherwise eax = file system error code; if file does not
2321
  * otherwise eax = file system error code; if file does not
2322
    contain valid skin, function returns error 3
2322
    contain valid skin, function returns error 3
2323
    (unknown file system).
2323
    (unknown file system).
2324
Remarks:
2324
Remarks:
2325
  * After successful skin loading the system sends to all windows
2325
  * After successful skin loading the system sends to all windows
2326
    redraw message (the event 1).
2326
    redraw message (the event 1).
2327
  * At booting the system reads skin from file 'default.skn'
2327
  * At booting the system reads skin from file 'default.skn'
2328
    on ramdisk.
2328
    on ramdisk.
2329
  * User can change the skin statically by creating hisself
2329
  * User can change the skin statically by creating hisself
2330
    'default.skn' or dynamically with the application 'desktop'.
2330
    'default.skn' or dynamically with the application 'desktop'.
2331
 
2331
 
2332
======================================================================
2332
======================================================================
2333
=========== Function 49 - Advanced Power Management (APM). ===========
2333
=========== Function 49 - Advanced Power Management (APM). ===========
2334
======================================================================
2334
======================================================================
2335
Parameters:
2335
Parameters:
2336
  * eax = 49 - function number
2336
  * eax = 49 - function number
2337
  * dx = number of the APM function
2337
  * dx = number of the APM function
2338
    (analogue of ax in APM specification)
2338
    (analogue of ax in APM specification)
2339
  * bx, cx = parameters of the APM function
2339
  * bx, cx = parameters of the APM function
2340
Returned value:
2340
Returned value:
2341
  * 16-bit registers ax, bx, cx, dx, si, di and carry flag CF
2341
  * 16-bit registers ax, bx, cx, dx, si, di and carry flag CF
2342
    are set according to the APM specification
2342
    are set according to the APM specification
2343
  * high halves of 32-bit registers eax, ebx, ecx,
2343
  * high halves of 32-bit registers eax, ebx, ecx,
2344
    edx, esi, edi are destroyed
2344
    edx, esi, edi are destroyed
2345
Remarks:
2345
Remarks:
2346
  * APM 1.2 specification is described in the document
2346
  * APM 1.2 specification is described in the document
2347
    "Advanced Power Management (APM) BIOS Specification"
2347
    "Advanced Power Management (APM) BIOS Specification"
2348
    (Revision 1.2), available at
2348
    (Revision 1.2), available at
2349
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2349
    http://www.microsoft.com/whdc/archive/amp_12.mspx;
2350
    besides it is included in famous Interrupt List by Ralf Brown
2350
    besides it is included in famous Interrupt List by Ralf Brown
2351
    (http://www.pobox.com/~ralf/files.html,
2351
    (http://www.pobox.com/~ralf/files.html,
2352
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
2352
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/).
2353
 
2353
 
2354
======================================================================
2354
======================================================================
2355
=================== Function 50 - set window shape. ==================
2355
=================== Function 50 - set window shape. ==================
2356
======================================================================
2356
======================================================================
2357
Normal windows have rectangular shape. This function can give to
2357
Normal windows have rectangular shape. This function can give to
2358
a window any shape. The shape is given by a set of points inside
2358
a window any shape. The shape is given by a set of points inside
2359
the base rectangle belonging to a window. Position and coordinates
2359
the base rectangle belonging to a window. Position and coordinates
2360
of the base rectangle are set by function 0
2360
of the base rectangle are set by function 0
2361
and changed by function 67.
2361
and changed by function 67.
2362
 
2362
 
2363
--------------------------- Set shape data ---------------------------
2363
--------------------------- Set shape data ---------------------------
2364
Parameters:
2364
Parameters:
2365
  * eax = 50 - function number
2365
  * eax = 50 - function number
2366
  * ebx = 0 - subfunction number
2366
  * ebx = 0 - subfunction number
2367
  * ecx = pointer to shape data (array of bytes 0/1)
2367
  * ecx = pointer to shape data (array of bytes 0/1)
2368
Returned value:
2368
Returned value:
2369
  * function does not return value
2369
  * function does not return value
2370
 
2370
 
2371
-------------------------- Set shape scale ---------------------------
2371
-------------------------- Set shape scale ---------------------------
2372
Parameters:
2372
Parameters:
2373
  * eax = 50 - function number
2373
  * eax = 50 - function number
2374
  * ebx = 1 - subfunction number
2374
  * ebx = 1 - subfunction number
2375
  * ecx sets a scale: each byte of data defines
2375
  * ecx sets a scale: each byte of data defines
2376
    (2^scale)*(2^scale) pixels
2376
    (2^scale)*(2^scale) pixels
2377
Returned value:
2377
Returned value:
2378
  * function does not return value
2378
  * function does not return value
2379
Remarks:
2379
Remarks:
2380
  * Default scale is 0 (scale factor is 1). If in the shape data
2380
  * Default scale is 0 (scale factor is 1). If in the shape data
2381
    one byte corresponds to one pixel, there is no necessity
2381
    one byte corresponds to one pixel, there is no necessity
2382
    to set scale.
2382
    to set scale.
2383
  * Let's designate xsize = window width (in pixels), ysize = height;
2383
  * Let's designate xsize = window width (in pixels), ysize = height;
2384
    pay attention, that they are one pixel more than defined by
2384
    pay attention, that they are one pixel more than defined by
2385
    functions 0, 67.
2385
    functions 0, 67.
2386
  * On definition of scale xsize and ysize must be divisible
2386
  * On definition of scale xsize and ysize must be divisible
2387
    on 2^scale.
2387
    on 2^scale.
2388
  * Byte of data on offset 'a' must be 0/1 and defines belonging
2388
  * Byte of data on offset 'a' must be 0/1 and defines belonging
2389
    to a window of square with the side 2^scale (if scale=0,
2389
    to a window of square with the side 2^scale (if scale=0,
2390
    this is one pixel) and coordinates of the left upper corner
2390
    this is one pixel) and coordinates of the left upper corner
2391
    (a mod (xsize shr scale), a div (xsize shr scale))
2391
    (a mod (xsize shr scale), a div (xsize shr scale))
2392
  * Data size: (xsize shr scale)*(ysize shr scale).
2392
  * Data size: (xsize shr scale)*(ysize shr scale).
2393
  * Data must be presented in the memory and not change
2393
  * Data must be presented in the memory and not change
2394
    after set of shape.
2394
    after set of shape.
2395
  * The system views the shape data at every window redraw by
2395
  * The system views the shape data at every window redraw by
2396
    function 0.
2396
    function 0.
2397
  * The call of subfunction 0 with NULL pointer results in return
2397
  * The call of subfunction 0 with NULL pointer results in return
2398
    to the rectangular shape.
2398
    to the rectangular shape.
2399
 
2399
 
2400
======================================================================
2400
======================================================================
2401
==================== Function 51 - create thread. ====================
2401
==================== Function 51 - create thread. ====================
2402
======================================================================
2402
======================================================================
2403
Parameters:
2403
Parameters:
2404
  * eax = 51 - function number
2404
  * eax = 51 - function number
2405
  * ebx = 1 - unique subfunction
2405
  * ebx = 1 - unique subfunction
2406
  * ecx = address of thread entry point (starting eip)
2406
  * ecx = address of thread entry point (starting eip)
2407
  * edx = pointer to thread stack (starting esp)
2407
  * edx = pointer to thread stack (starting esp)
2408
Returned value:
2408
Returned value:
2409
  * eax = -1 - error (there is too many threads)
2409
  * eax = -1 - error (there is too many threads)
2410
  * otherwise eax = TID - thread identifier
2410
  * otherwise eax = TID - thread identifier
2411
    
2411
    
2412
 
2412
 
2413
======================================================================
2413
======================================================================
2414
=========================== Function 52 ==============================
-
 
2415
======================================================================
-
 
2416
 
-
 
2417
WARNING: This function is obsolete and is only present in the
-
 
2418
	 documentation as a guide to understand/port the older network
-
 
2419
         applications. For new programs, use function 74
-
 
2420
 
-
 
2421
======================================================================
-
 
2422
=== Function 52, subfunction 0 - get network driver configuration. ===
-
 
2423
======================================================================
-
 
2424
 
-
 
2425
Parameters:
-
 
2426
  * eax = 52 - function number
-
 
2427
  * ebx = 0 - subfunction number
-
 
2428
Returned value:
-
 
2429
  * eax = configuration dword
-
 
2430
Remarks:
-
 
2431
  * Configuration dword can be set by subfunction 2.
-
 
2432
  * The kernel does not use this variable. The value of this
-
 
2433
    variable and working with it subfunctions 0 and 2 is represented
-
 
2434
    doubtful.
-
 
2435
 
-
 
2436
======================================================================
-
 
2437
========= Function 52, subfunction 1 - get local IP-address. =========
-
 
2438
======================================================================
-
 
2439
Parameters:
-
 
2440
  * eax = 52 - function number
-
 
2441
  * ebx = 1 - subfunction number
-
 
2442
Returned value:
-
 
2443
  * eax = IP-address (4 bytes)
-
 
2444
Remarks:
-
 
2445
  * Local IP-address is set by subfunction 3.
-
 
2446
 
-
 
2447
======================================================================
-
 
2448
=== Function 52, subfunction 2 - set network driver configuration. ===
-
 
2449
======================================================================
-
 
2450
Parameters:
-
 
2451
  * eax = 52 - function number
-
 
2452
  * ebx = 2 - subfunction number
-
 
2453
  * ecx = configuration dword; if low 7 bits derivate the number 3,
-
 
2454
    function [re-]initializes Ethernet-card, otherwise
-
 
2455
    Ethernet turns off
-
 
2456
Returned value:
-
 
2457
  * if Ethernet-interface is not requested, function returns eax=2,
-
 
2458
    but this can be changed in future kernel versions
-
 
2459
  * if Ethernet-interface is requested, eax=0 means error
-
 
2460
    (absence of Ethernet-card), and nonzero value - success
-
 
2461
Remarks:
-
 
2462
  * Configuration dword can be read by subfunction 0.
-
 
2463
  * The kernel does not use this variable. The value of this
-
 
2464
    variable, subfunction 0 and part of subfunction 2, which set it,
-
 
2465
    is represented doubtful.
-
 
2466
 
-
 
2467
======================================================================
-
 
2468
========= Function 52, subfunction 3 - set local IP-address. =========
-
 
2469
======================================================================
-
 
2470
Parameters:
-
 
2471
  * eax = 52 - function number
-
 
2472
  * ebx = 3 - subfunction number
-
 
2473
  * ecx = IP-address (4 bytes)
-
 
2474
Returned value:
-
 
2475
  * the current implementation returns eax=3, but this can be changed
-
 
2476
    in future versions
-
 
2477
Remarks:
-
 
2478
  * Local IP-address can be get by subfunction 1.
-
 
2479
 
-
 
2480
======================================================================
-
 
2481
= Function 52, subfunction 6 - add data to the stack of input queue. =
-
 
2482
======================================================================
-
 
2483
Parameters:
-
 
2484
  * eax = 52 - function number
-
 
2485
  * ebx = 6 - subfunction number
-
 
2486
  * edx = data size
-
 
2487
  * esi = data pointer
-
 
2488
Returned value:
-
 
2489
  * eax = -1 - error
-
 
2490
  * eax = 0 - success
-
 
2491
Remarks:
-
 
2492
  * This function is intended only for slow network drivers
-
 
2493
    (PPP, SLIP).
-
 
2494
  * Data size must not exceed 1500 bytes, though function
-
 
2495
    performs no checks on correctness.
-
 
2496
 
-
 
2497
======================================================================
-
 
2498
 Function 52, subfunction 8 - read data from the network output queue.
-
 
2499
======================================================================
-
 
2500
Parameters:
-
 
2501
  * eax = 52 - function number
-
 
2502
  * ebx = 8 - subfunction number
-
 
2503
  * esi = pointer to 1500-byte buffer
-
 
2504
Returned value:
-
 
2505
  * eax = number of read bytes (in the current implementation
-
 
2506
    either 0 = no data or 1500)
-
 
2507
  * data was copied in buffer
-
 
2508
Remarks:
-
 
2509
  * This function is intended only for slow network drivers
-
 
2510
    (PPP, SLIP).
-
 
2511
 
-
 
2512
======================================================================
-
 
2513
============ Function 52, subfunction 9 - get gateway IP. ============
-
 
2514
======================================================================
-
 
2515
Parameters:
-
 
2516
  * eax = 52 - function number
-
 
2517
  * ebx = 9 - subfunction number
-
 
2518
Returned value:
-
 
2519
  * eax = gateway IP (4 bytes)
-
 
2520
 
-
 
2521
======================================================================
-
 
2522
=========== Function 52, subfunction 10 - get subnet mask. ===========
-
 
2523
======================================================================
-
 
2524
Parameters:
-
 
2525
  * eax = 52 - function number
-
 
2526
  * ebx = 10 - subfunction number
-
 
2527
Returned value:
-
 
2528
  * eax = subnet mask
-
 
2529
 
-
 
2530
======================================================================
-
 
2531
============ Function 52, subfunction 11 - set gateway IP. ===========
-
 
2532
======================================================================
-
 
2533
Parameters:
-
 
2534
  * eax = 52 - function number
-
 
2535
  * ebx = 11 - subfunction number
-
 
2536
  * ecx = gateway IP (4 bytes)
-
 
2537
Returned value:
-
 
2538
  * the current implementation returns eax=11, but this can be changed
-
 
2539
    in future versions
-
 
2540
 
-
 
2541
======================================================================
-
 
2542
=========== Function 52, subfunction 12 - set subnet mask. ===========
-
 
2543
======================================================================
-
 
2544
Parameters:
-
 
2545
  * eax = 52 - function number
-
 
2546
  * ebx = 12 - subfunction number
-
 
2547
  * ecx = subnet mask
-
 
2548
Returned value:
-
 
2549
  * the current implementation returns eax=12, but this can be changed
-
 
2550
    in future versions
-
 
2551
 
-
 
2552
======================================================================
-
 
2553
============== Function 52, subfunction 13 - get DNS IP. =============
-
 
2554
======================================================================
-
 
2555
Parameters:
-
 
2556
  * eax = 52 - function number
-
 
2557
  * ebx = 13 - subfunction number
-
 
2558
Returned value:
-
 
2559
  * eax = DNS IP (4 bytes)
-
 
2560
 
-
 
2561
======================================================================
-
 
2562
============== Function 52, subfunction 14 - set DNS IP. =============
-
 
2563
======================================================================
-
 
2564
Parameters:
-
 
2565
  * eax = 52 - function number
-
 
2566
  * ebx = 14 - subfunction number
-
 
2567
  * ecx = DNS IP (4 bytes)
-
 
2568
Returned value:
-
 
2569
  * the current implementation returns eax=14, but this can be changed
-
 
2570
    in future versions
-
 
2571
 
-
 
2572
======================================================================
-
 
2573
======== Function 52, subfunction 15 - get local MAC address. ========
-
 
2574
======================================================================
-
 
2575
Parameters:
-
 
2576
  * eax = 52 - function number
-
 
2577
  * ebx = 15 - subfunction number
-
 
2578
  * ecx = 0 - read first 4 bytes,
-
 
2579
    ecx = 4 - read last 2 bytes
-
 
2580
Returned value:
-
 
2581
  * for ecx=0: eax = first 4 bytes of MAC address
-
 
2582
  * for ecx=4: ax = last 2 bytes of MAC address,
-
 
2583
               high half of eax is destroyed
-
 
2584
  * for other ecx: eax = -1 indicates an error
-
 
2585
 
-
 
2586
======================================================================
-
 
2587
=========================== Function 53 ==============================
-
 
2588
======================================================================
-
 
2589
 
-
 
2590
WARNING: This function is obsolete and is only present in the
-
 
2591
	 documentation as a guide to understand/port the older network
-
 
2592
         applications. For new programs, use function 75.
-
 
2593
 
-
 
2594
======================================================================
-
 
2595
============ Function 53, subfunction 0 - open UDP-socket. ===========
-
 
2596
======================================================================
-
 
2597
Parameters:
-
 
2598
  * eax = 53 - function number
-
 
2599
  * ebx = 0 - subfunction number
-
 
2600
  * ecx = local port (only low word is taken into account),
-
 
2601
    ecx = 0 - let the system choose a port
-
 
2602
  * edx = remote port (only low word is taken into account)
-
 
2603
  * esi = remote IP
-
 
2604
Returned value:
-
 
2605
  * eax = -1 = 0xFFFFFFFF - error; ebx destroyed
-
 
2606
  * eax = socket handle (some number which unambiguously identifies
-
 
2607
    socket and have sense only for the system) - success;
-
 
2608
    ebx destroyed
-
 
2609
 
-
 
2610
======================================================================
-
 
2611
=========== Function 53, subfunction 1 - close UDP-socket. ===========
-
 
2612
======================================================================
-
 
2613
Parameters:
-
 
2614
  * eax = 53 - function number
-
 
2615
  * ebx = 1 - subfunction number
-
 
2616
  * ecx = socket handle
-
 
2617
Returned value:
-
 
2618
  * eax = -1 - incorrect handle
-
 
2619
  * eax = 0 - success
-
 
2620
  * ebx destroyed
-
 
2621
Remarks:
-
 
2622
  * The current implementation does not close automatically all
-
 
2623
    sockets of a thread at termination. In particular, one should not
-
 
2624
    kill a thread with many opened sockets - there will be an outflow
-
 
2625
    of resources.
-
 
2626
 
-
 
2627
======================================================================
-
 
2628
============== Function 53, subfunction 2 - poll socket. =============
-
 
2629
======================================================================
-
 
2630
Parameters:
-
 
2631
  * eax = 53 - function number
-
 
2632
  * ebx = 2 - subfunction number
-
 
2633
  * ecx = socket handle
-
 
2634
Returned value:
-
 
2635
  * eax = number of read bytes, 0 for incorrect handle
-
 
2636
  * ebx destroyed
-
 
2637
 
-
 
2638
======================================================================
-
 
2639
========= Function 53, subfunction 3 - read byte from socket. ========
-
 
2640
======================================================================
-
 
2641
Parameters:
-
 
2642
  * eax = 53 - function number
-
 
2643
  * ebx = 3 - subfunction number
-
 
2644
  * ecx = socket handle
-
 
2645
Returned value:
-
 
2646
  * if there is no read data or handle is incorrect: eax=0, bl=0,
-
 
2647
    other bytes of ebx are destroyed
-
 
2648
  * if there are read data: eax=number of rest bytes
-
 
2649
    (possibly 0), bl=read byte, other bytes of ebx are destroyed
-
 
2650
 
-
 
2651
======================================================================
-
 
2652
========== Function 53, subfunction 4 - write to UDP-socket. =========
-
 
2653
======================================================================
-
 
2654
Parameters:
-
 
2655
  * eax = 53 - function number
-
 
2656
  * ebx = 4 - subfunction number
-
 
2657
  * ecx = socket handle
-
 
2658
  * edx = number of bytes to write
-
 
2659
  * esi = pointer to data to write
-
 
2660
Returned value:
-
 
2661
  * eax = 0xffffffff - error (invalid handle or not enough memory)
-
 
2662
  * eax = 0 - success
-
 
2663
  * ebx destroyed
-
 
2664
Remarks:
-
 
2665
  * Number of bytes to write must not exceed 1500-28, though
-
 
2666
    the appropriate check is not made.
-
 
2667
 
-
 
2668
======================================================================
-
 
2669
============ Function 53, subfunction 5 - open TCP-socket. ===========
-
 
2670
======================================================================
-
 
2671
Parameters:
-
 
2672
  * eax = 53 - function number
-
 
2673
  * ebx = 5 - subfunction number
-
 
2674
  * ecx = local port (only low word is taken into account),
-
 
2675
    ecx = 0 - let the system choose a port
-
 
2676
  * edx = remote port (only low word is taken into account)
-
 
2677
  * esi = remote IP
-
 
2678
  * edi = open mode: SOCKET_PASSIVE=0 or SOCKET_ACTIVE=1
-
 
2679
Returned value:
-
 
2680
  * eax = -1 = 0xFFFFFFFF - error; ebx destroys
-
 
2681
  * eax = socket handle (some number which unambiguously identifies
-
 
2682
    socket and have sense only for the system) - success;
-
 
2683
    ebx destroyed
-
 
2684
 
-
 
2685
======================================================================
-
 
2686
========= Function 53, subfunction 6 - get TCP-socket status. ========
-
 
2687
======================================================================
-
 
2688
Parameters:
-
 
2689
  * eax = 53 - function number
-
 
2690
  * ebx = 6 - subfunction number
-
 
2691
  * ecx = socket handle
-
 
2692
Returned value:
-
 
2693
  * eax = 0 for incorrect handle or socket status: one of
-
 
2694
  * TCB_LISTEN = 1
-
 
2695
  * TCB_SYN_SENT = 2
-
 
2696
  * TCB_SYN_RECEIVED = 3
-
 
2697
  * TCB_ESTABLISHED = 4
-
 
2698
  * TCB_FIN_WAIT_1 = 5
-
 
2699
  * TCB_FIN_WAIT_2 = 6
-
 
2700
  * TCB_CLOSE_WAIT = 7
-
 
2701
  * TCB_CLOSING = 8
-
 
2702
  * TCB_LAST_ASK = 9
-
 
2703
  * TCB_TIME_WAIT = 10
-
 
2704
  * TCB_CLOSED = 11
-
 
2705
  * ebx destroyed
-
 
2706
 
-
 
2707
======================================================================
-
 
2708
========== Function 53, subfunction 7 - write to TCP-socket. =========
-
 
2709
======================================================================
-
 
2710
Parameters:
-
 
2711
  * eax = 53 - function number
-
 
2712
  * ebx = 7 - subfunction number
-
 
2713
  * ecx = socket handle
-
 
2714
  * edx = number of bytes to write
-
 
2715
  * esi = pointer to data to write
-
 
2716
Returned value:
-
 
2717
  * eax = 0xffffffff - error (invalid handle or not enough memory)
-
 
2718
  * eax = 0 - success
-
 
2719
  * ebx destroyed
-
 
2720
Remarks:
-
 
2721
  * Number of bytes to write must not exceed 1500-40, though
-
 
2722
    the appropriate check is not made.
-
 
2723
 
-
 
2724
======================================================================
-
 
2725
=========== Function 53, subfunction 8 - close TCP-socket. ===========
-
 
2726
======================================================================
-
 
2727
Parameters:
-
 
2728
  * eax = 53 - function number
-
 
2729
  * ebx = 8 - subfunction number
-
 
2730
  * ecx = socket handle
-
 
2731
Returned value:
-
 
2732
  * eax = -1 - error (invalid handle or
-
 
2733
    not enough memory for socket close packet)
-
 
2734
  * eax = 0 - success
-
 
2735
  * ebx destroyed
-
 
2736
Remarks:
-
 
2737
  * The current implementation does not close automatically all
-
 
2738
    sockets of a thread at termination. In particular, one should not
-
 
2739
    kill a thread with many opened sockets - there will be an outflow
-
 
2740
    of resources.
-
 
2741
 
-
 
2742
======================================================================
-
 
2743
=== Function 53, subfunction 9 - check whether local port is free. ===
-
 
2744
======================================================================
-
 
2745
Parameters:
-
 
2746
  * eax = 53 - function number
-
 
2747
  * ebx = 9 - subfunction number
-
 
2748
  * ecx = local port number (low 16 bits are used only)
-
 
2749
Returned value:
-
 
2750
  * eax = 0 - port is used
-
 
2751
  * eax = 1 - port is free
-
 
2752
  * ebx destroyed
-
 
2753
 
-
 
2754
======================================================================
-
 
2755
===== Function 53, subfunction 10 - query Ethernet cable status. =====
-
 
2756
======================================================================
-
 
2757
Parameters:
-
 
2758
  * eax = 53 - function number
-
 
2759
  * ebx = 10 - subfunction number
-
 
2760
Returned value:
-
 
2761
  * al = -1 - a network driver is not loaded or
-
 
2762
              does not support this function
-
 
2763
  * al = 0 - Ethernet cable is unplugged
-
 
2764
  * al = 1 - Ethernet cable is plugged
-
 
2765
  * ebx destroyed
-
 
2766
Remarks:
-
 
2767
  * The current kernel implementation supports this function
-
 
2768
    only for RTL8139 network cards.
-
 
2769
 
-
 
2770
======================================================================
-
 
2771
======= Function 53, subfunction 11 - read network stack data. =======
-
 
2772
======================================================================
-
 
2773
Paramters:
-
 
2774
  * eax = 53 - function number
-
 
2775
  * ebx = 11 - subfunction number
-
 
2776
  * ecx = socket handle
-
 
2777
  * edx = pointer to buffer
-
 
2778
  * esi = number of bytes to read;
-
 
2779
  * esi = 0 - read all data (maximum 4096 bytes)
-
 
2780
Returned value:
-
 
2781
  * eax = number of bytes read (0 for incorrect handle)
-
 
2782
  * ebx destroyed
-
 
2783
 
-
 
2784
======================================================================
-
 
2785
= Function 53, subfunction 255 - debug information of network driver.
-
 
2786
======================================================================
-
 
2787
Parameters:
-
 
2788
  * eax = 53 - function number
-
 
2789
  * ebx = 255 - subfunction number
-
 
2790
  * ecx = type of requested information (see below)
-
 
2791
Returned value:
-
 
2792
  * eax = requested information
-
 
2793
  * ebx destroyed
-
 
2794
Possible values for ecx:
-
 
2795
  * 100: length of queue 0 (empty queue)
-
 
2796
  * 101: length of queue 1 (ip-out queue)
-
 
2797
  * 102: length of queue 2 (ip-in queue)
-
 
2798
  * 103: length of queue 3 (net1out queue)
-
 
2799
  * 200: number of items in the ARP table
-
 
2800
  * 201: size of the ARP table (in items) (20 for current version)
-
 
2801
  * 202: read item at edx of the ARP table to the temporary buffer,
-
 
2802
    whence 5 following types take information;
-
 
2803
    in this case eax is not defined
-
 
2804
  * 203: IP-address saved by type 202
-
 
2805
  * 204: high dword of MAC-address saved by type 202
-
 
2806
  * 205: low word of MAC-address saved by type 202
-
 
2807
  * 206: status word saved by type 202
-
 
2808
  * 207: ttl word saved by type 202
-
 
2809
  * 2: total number of received IP-packets
-
 
2810
  * 3: total number of transferred IP-packets
-
 
2811
  * 4: total number of dumped received packets
-
 
2812
  * 5: total number of received ARP-packets
-
 
2813
  * 6: status of packet driver, 0=inactive, nonzero=active
-
 
2814
 
-
 
2815
======================================================================
-
 
2816
 Function 55, subfunction 55 - begin to play data on built-in speaker.
2414
 Function 55, subfunction 55 - begin to play data on built-in speaker.
2817
======================================================================
2415
======================================================================
2818
Parameters:
2416
Parameters:
2819
  * eax = 55 - function number
2417
  * eax = 55 - function number
2820
  * ebx = 55 - subfunction number
2418
  * ebx = 55 - subfunction number
2821
  * esi = pointer to data
2419
  * esi = pointer to data
2822
Returned value:
2420
Returned value:
2823
  * eax = 0 - success
2421
  * eax = 0 - success
2824
  * eax = 55 - error (speaker is off or busy)
2422
  * eax = 55 - error (speaker is off or busy)
2825
Data is an array of items with variable length.
2423
Data is an array of items with variable length.
2826
Format of each item is defined by first byte:
2424
Format of each item is defined by first byte:
2827
  * 0 = end of data
2425
  * 0 = end of data
2828
  * 1..0x80 = sets sound duration on 1/100 of second; sound note
2426
  * 1..0x80 = sets sound duration on 1/100 of second; sound note
2829
    is defined by immediate value of frequency
2427
    is defined by immediate value of frequency
2830
    * following word (2 bytes) contains frequency divider;
2428
    * following word (2 bytes) contains frequency divider;
2831
      frequency is defined as 1193180/divider
2429
      frequency is defined as 1193180/divider
2832
  * 0x81 = invalid
2430
  * 0x81 = invalid
2833
  * 0x82..0xFF = note is defined by octave and number:
2431
  * 0x82..0xFF = note is defined by octave and number:
2834
    * duration in 1/100 of second = (first byte)-0x81
2432
    * duration in 1/100 of second = (first byte)-0x81
2835
    * there is one more byte;
2433
    * there is one more byte;
2836
    * (second byte)=0xFF - delay
2434
    * (second byte)=0xFF - delay
2837
    * otherwise it looks like a*0x10+b, where b=number of the note in
2435
    * otherwise it looks like a*0x10+b, where b=number of the note in
2838
      an octave from 1 to 12, a=number of octave (beginning from 0)
2436
      an octave from 1 to 12, a=number of octave (beginning from 0)
2839
Remarks:
2437
Remarks:
2840
  * Speaker play can be disabled/enabled by
2438
  * Speaker play can be disabled/enabled by
2841
    subfunction 8 of function 18.
2439
    subfunction 8 of function 18.
2842
  * Function returns control, having informed the system
2440
  * Function returns control, having informed the system
2843
    an information on request. Play itself goes independently from
2441
    an information on request. Play itself goes independently from
2844
    the program.
2442
    the program.
2845
  * The data must be kept in the memory at least up to the end
2443
  * The data must be kept in the memory at least up to the end
2846
    of play.
2444
    of play.
2847
 
2445
 
2848
======================================================================
2446
======================================================================
2849
======================= Function 57 - PCI BIOS. ======================
2447
======================= Function 57 - PCI BIOS. ======================
2850
======================================================================
2448
======================================================================
2851
Parameters:
2449
Parameters:
2852
  * eax = 57 - function number
2450
  * eax = 57 - function number
2853
  * ebp corresponds to al in PCI BIOS specification
2451
  * ebp corresponds to al in PCI BIOS specification
2854
  * other registers are set according to PCI BIOS specification
2452
  * other registers are set according to PCI BIOS specification
2855
Returned value:
2453
Returned value:
2856
  * CF is undefined
2454
  * CF is undefined
2857
  * other registers are set according to PCI BIOS specification
2455
  * other registers are set according to PCI BIOS specification
2858
Remarks:
2456
Remarks:
2859
  * Many effects of this function can be also achieved with
2457
  * Many effects of this function can be also achieved with
2860
    corresponding subfunctions of function 62.
2458
    corresponding subfunctions of function 62.
2861
  * The function calls PCI32 BIOS extension, documented e.g. in
2459
  * The function calls PCI32 BIOS extension, documented e.g. in
2862
    http://alpha1.dyns.net/files/PCI/bios21.pdf.
2460
    http://alpha1.dyns.net/files/PCI/bios21.pdf.
2863
  * If BIOS does not support this extension, its behavior is emulated
2461
  * If BIOS does not support this extension, its behavior is emulated
2864
    (through kernel-mode analogues of subfunctions of function 62).
2462
    (through kernel-mode analogues of subfunctions of function 62).
2865
 
2463
 
2866
======================================================================
2464
======================================================================
2867
================ Function 58 - work with file system. ================
2465
================ Function 58 - work with file system. ================
2868
======================================================================
2466
======================================================================
2869
Parameters:
2467
Parameters:
2870
  * eax = 58
2468
  * eax = 58
2871
  * ebx = pointer to the information structure
2469
  * ebx = pointer to the information structure
2872
Returned value:
2470
Returned value:
2873
  * eax = 0 - success; otherwise file system error code
2471
  * eax = 0 - success; otherwise file system error code
2874
  * some subfunctions return value in other registers too
2472
  * some subfunctions return value in other registers too
2875
General format of the information structure:
2473
General format of the information structure:
2876
  * +0: dword: subfunction number
2474
  * +0: dword: subfunction number
2877
  * +4: dword: number of block
2475
  * +4: dword: number of block
2878
  * +8: dword: size
2476
  * +8: dword: size
2879
  * +12 = +0xC: dword: pointer to data
2477
  * +12 = +0xC: dword: pointer to data
2880
  * +16 = +0x10: dword: pointer to a memory for system operations
2478
  * +16 = +0x10: dword: pointer to a memory for system operations
2881
    (4096 bytes)
2479
    (4096 bytes)
2882
  * +20 = +0x14: n db: ASCIIZ-string with the file name
2480
  * +20 = +0x14: n db: ASCIIZ-string with the file name
2883
Specifications - in documentation on the appropriate subfunction.
2481
Specifications - in documentation on the appropriate subfunction.
2884
Filename is case-insensitive for latin letters, russian letters
2482
Filename is case-insensitive for latin letters, russian letters
2885
must be capital.
2483
must be capital.
2886
Format of filename:
2484
Format of filename:
2887
/base/number/dir1/dir2/.../dirn/file,
2485
/base/number/dir1/dir2/.../dirn/file,
2888
where /base/number identifies device, on which file is located:
2486
where /base/number identifies device, on which file is located:
2889
one of
2487
one of
2890
  * /RD/1 = /RAMDISK/1 to access ramdisk
2488
  * /RD/1 = /RAMDISK/1 to access ramdisk
2891
  * /FD/1 = /FLOPPYDISK/1 to access first floppy drive,
2489
  * /FD/1 = /FLOPPYDISK/1 to access first floppy drive,
2892
    /FD/2 = /FLOPPYDISK/2 to access second one
2490
    /FD/2 = /FLOPPYDISK/2 to access second one
2893
  * /HD/x = /HARDDISK/x - obsolete variant of access to hard disk
2491
  * /HD/x = /HARDDISK/x - obsolete variant of access to hard disk
2894
    (in this case base is defined by subfunction 7 of function 21),
2492
    (in this case base is defined by subfunction 7 of function 21),
2895
    x - partition number (beginning from 1)
2493
    x - partition number (beginning from 1)
2896
  * /HD0/x, /HD1/x, /HD2/x, /HD3/x to access accordingly to devices
2494
  * /HD0/x, /HD1/x, /HD2/x, /HD3/x to access accordingly to devices
2897
    IDE0 (Primary Master), IDE1 (Primary Slave),
2495
    IDE0 (Primary Master), IDE1 (Primary Slave),
2898
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
2496
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
2899
    x - partition number on the selected hard drive, varies from 1
2497
    x - partition number on the selected hard drive, varies from 1
2900
    to 255 (on each hard drive the indexing starts from 1)
2498
    to 255 (on each hard drive the indexing starts from 1)
2901
Remarks:
2499
Remarks:
2902
  * In the first two cases it is also possible to use FIRST
2500
  * In the first two cases it is also possible to use FIRST
2903
    instead of 1, SECOND instead of 2, but it is not recommended
2501
    instead of 1, SECOND instead of 2, but it is not recommended
2904
    for convenience of transition to the future extensions.
2502
    for convenience of transition to the future extensions.
2905
  * Limitation n<=39 is imposed.
2503
  * Limitation n<=39 is imposed.
2906
  * Names of folders and file dir1,...,dirn,file must have the
2504
  * Names of folders and file dir1,...,dirn,file must have the
2907
    format 8.3: name no more than 8 characters, dot, extension no
2505
    format 8.3: name no more than 8 characters, dot, extension no
2908
    more than 3 characters. Trailing spaces are ignored, no other
2506
    more than 3 characters. Trailing spaces are ignored, no other
2909
    spaces is allowed. If name occupies equally 8 characters,
2507
    spaces is allowed. If name occupies equally 8 characters,
2910
    dot may be omitted (though it is not recommended to use this
2508
    dot may be omitted (though it is not recommended to use this
2911
    feature for convenience of transition to the future extensions).
2509
    feature for convenience of transition to the future extensions).
2912
  * This function does not support folders on ramdisk.
2510
  * This function does not support folders on ramdisk.
2913
Examples:
2511
Examples:
2914
  * '/RAMDISK/FIRST/KERNEL.ASM',0
2512
  * '/RAMDISK/FIRST/KERNEL.ASM',0
2915
    '/rd/1/kernel.asm',0
2513
    '/rd/1/kernel.asm',0
2916
  * '/HD0/1/kernel.asm',0
2514
  * '/HD0/1/kernel.asm',0
2917
  * '/hd0/1/menuet/pics/tanzania.bmp',0
2515
  * '/hd0/1/menuet/pics/tanzania.bmp',0
2918
Existing subfunctions:
2516
Existing subfunctions:
2919
  * subfunction 0 - read file/folder
2517
  * subfunction 0 - read file/folder
2920
  * subfunction 8 - LBA-read from device
2518
  * subfunction 8 - LBA-read from device
2921
  * subfunction 15 - get file system information
2519
  * subfunction 15 - get file system information
2922
 
2520
 
2923
======================================================================
2521
======================================================================
2924
=========== Function 58, subfunction 0 - read file/folder. ===========
2522
=========== Function 58, subfunction 0 - read file/folder. ===========
2925
======================================================================
2523
======================================================================
2926
Parameters:
2524
Parameters:
2927
  * eax = 58
2525
  * eax = 58
2928
  * ebx = pointer to the information structure
2526
  * ebx = pointer to the information structure
2929
Format of the information structure:
2527
Format of the information structure:
2930
  * +0: dword: 0 = subfunction number
2528
  * +0: dword: 0 = subfunction number
2931
  * +4: dword: first block to read (beginning from 0)
2529
  * +4: dword: first block to read (beginning from 0)
2932
  * +8: dword: amount of blocks to read
2530
  * +8: dword: amount of blocks to read
2933
  * +12 = +0xC: dword: pointer to buffer for data
2531
  * +12 = +0xC: dword: pointer to buffer for data
2934
  * +16 = +0x10: dword: pointer to buffer for system operations
2532
  * +16 = +0x10: dword: pointer to buffer for system operations
2935
    (4096 bytes)
2533
    (4096 bytes)
2936
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
2534
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
2937
    given in the general description
2535
    given in the general description
2938
Returned value:
2536
Returned value:
2939
  * eax = 0 - success, otherwise file system error code
2537
  * eax = 0 - success, otherwise file system error code
2940
  * ebx = file size (in bytes) or -1=0xffffffff, if file was not found
2538
  * ebx = file size (in bytes) or -1=0xffffffff, if file was not found
2941
Remarks:
2539
Remarks:
2942
  * Block size is 512 bytes.
2540
  * Block size is 512 bytes.
2943
  * This function is obsolete, for reading files use subfunction 0
2541
  * This function is obsolete, for reading files use subfunction 0
2944
    of function 70, for reading folders - subfunction 1 of
2542
    of function 70, for reading folders - subfunction 1 of
2945
    function 70.
2543
    function 70.
2946
  * Function can read contents of a folder. Only FAT file system is
2544
  * Function can read contents of a folder. Only FAT file system is
2947
    supported. The format of FAT-folder is described
2545
    supported. The format of FAT-folder is described
2948
    in any FAT documentation.
2546
    in any FAT documentation.
2949
  * Size of a folder is determined by size of FAT clusters chain.
2547
  * Size of a folder is determined by size of FAT clusters chain.
2950
  * If file was ended before last requested block was read,
2548
  * If file was ended before last requested block was read,
2951
    the function will read as many as it can, and after that return
2549
    the function will read as many as it can, and after that return
2952
    eax=6 (EOF).
2550
    eax=6 (EOF).
2953
  * Function can read root folders /rd/1,/fd/x,/hd[n]/x, but
2551
  * Function can read root folders /rd/1,/fd/x,/hd[n]/x, but
2954
    in the first two cases the current implementation does not follow
2552
    in the first two cases the current implementation does not follow
2955
    to the declared rules:
2553
    to the declared rules:
2956
    for /rd/1:
2554
    for /rd/1:
2957
    * if one want to read 0 blocks, function considers,
2555
    * if one want to read 0 blocks, function considers,
2958
      that he requested 1;
2556
      that he requested 1;
2959
    * if one requests more than 14 blocks or starting block is
2557
    * if one requests more than 14 blocks or starting block is
2960
      not less than 14, function returns eax=5 (not found) and ebx=-1;
2558
      not less than 14, function returns eax=5 (not found) and ebx=-1;
2961
    * size of ramdisk root folder is 14 blocks,
2559
    * size of ramdisk root folder is 14 blocks,
2962
      0x1C00=7168 bytes; but function returns ebx=0
2560
      0x1C00=7168 bytes; but function returns ebx=0
2963
      (except of the case of previous item);
2561
      (except of the case of previous item);
2964
    * strangely enough, it is possible to read 14th block (which
2562
    * strangely enough, it is possible to read 14th block (which
2965
      generally contains a garbage - I remind, the indexing begins
2563
      generally contains a garbage - I remind, the indexing begins
2966
      from 0);
2564
      from 0);
2967
    * if some block with the number not less than 14 was requested,
2565
    * if some block with the number not less than 14 was requested,
2968
      function returns eax=6(EOF); otherwise eax=0.
2566
      function returns eax=6(EOF); otherwise eax=0.
2969
    For /fd/x:
2567
    For /fd/x:
2970
    * if the start block is not less than 14, function returns
2568
    * if the start block is not less than 14, function returns
2971
      eax=5 (not found) and ebx=0;
2569
      eax=5 (not found) and ebx=0;
2972
    * note that format of FAT12 allows floppies with the root size
2570
    * note that format of FAT12 allows floppies with the root size
2973
      more or less than 14 blocks;
2571
      more or less than 14 blocks;
2974
    * check for length is not performed;
2572
    * check for length is not performed;
2975
    * if data was successful read, function returns
2573
    * if data was successful read, function returns
2976
      eax=0,ebx=0; otherwise eax=10 (access denied), ebx=-1.
2574
      eax=0,ebx=0; otherwise eax=10 (access denied), ebx=-1.
2977
  * The function handles reading of special folders /,/rd,/fd,/hd[n];
2575
  * The function handles reading of special folders /,/rd,/fd,/hd[n];
2978
    but the result does not correspond to expected (on operations with
2576
    but the result does not correspond to expected (on operations with
2979
    normal files/folders), does not follow the declared rules,
2577
    normal files/folders), does not follow the declared rules,
2980
    may be changed in future versions of the kernel and consequently
2578
    may be changed in future versions of the kernel and consequently
2981
    is not described. To obtain the information about the equipment
2579
    is not described. To obtain the information about the equipment
2982
    use subfunction 11 of function 18 or
2580
    use subfunction 11 of function 18 or
2983
    read corresponding folder with subfunction 1 of function 70.
2581
    read corresponding folder with subfunction 1 of function 70.
2984
 
2582
 
2985
======================================================================
2583
======================================================================
2986
========= Function 58, subfunction 8 - LBA-read from device. =========
2584
========= Function 58, subfunction 8 - LBA-read from device. =========
2987
======================================================================
2585
======================================================================
2988
Parameters:
2586
Parameters:
2989
  * eax = 58 - function number
2587
  * eax = 58 - function number
2990
  * ebx = pointer to the information structure
2588
  * ebx = pointer to the information structure
2991
Format of the information structure:
2589
Format of the information structure:
2992
  * +0: dword: 8 = subfunction number
2590
  * +0: dword: 8 = subfunction number
2993
  * +4: dword: number of block to read (beginning from 0)
2591
  * +4: dword: number of block to read (beginning from 0)
2994
  * +8: dword: ignored (set to 1)
2592
  * +8: dword: ignored (set to 1)
2995
  * +12 = +0xC: dword: pointer to buffer for data (512 bytes)
2593
  * +12 = +0xC: dword: pointer to buffer for data (512 bytes)
2996
  * +16 = +0x10: dword: pointer to buffer for system operations
2594
  * +16 = +0x10: dword: pointer to buffer for system operations
2997
    (4096 bytes)
2595
    (4096 bytes)
2998
  * +20 = +0x14: ASCIIZ-name of device: case-insensitive, one of
2596
  * +20 = +0x14: ASCIIZ-name of device: case-insensitive, one of
2999
    /rd/1 = /RamDisk/1, /hd/n = /HardDisk/n,
2597
    /rd/1 = /RamDisk/1, /hd/n = /HardDisk/n,
3000
    1<=n<=4 - number of device: 1=IDE0, ..., 4=IDE3.
2598
    1<=n<=4 - number of device: 1=IDE0, ..., 4=IDE3.
3001
    Instead of digits it is allowed, though not recommended for
2599
    Instead of digits it is allowed, though not recommended for
3002
    convenience of transition to future extensions, to use
2600
    convenience of transition to future extensions, to use
3003
    'first','second','third','fourth'.
2601
    'first','second','third','fourth'.
3004
Returned value:
2602
Returned value:
3005
  * for device name /hd/xxx, where xxx is not in the list above:
2603
  * for device name /hd/xxx, where xxx is not in the list above:
3006
    * eax = ebx = 1
2604
    * eax = ebx = 1
3007
  * for invalid device name (except for the previous case):
2605
  * for invalid device name (except for the previous case):
3008
    * eax = 5
2606
    * eax = 5
3009
    * ebx does not change
2607
    * ebx does not change
3010
  * if LBA-access is disabled by subfunction 11 of function 21:
2608
  * if LBA-access is disabled by subfunction 11 of function 21:
3011
    * eax = 2
2609
    * eax = 2
3012
    * ebx destroyed
2610
    * ebx destroyed
3013
  * for ramdisk: attempt to read block outside ramdisk
2611
  * for ramdisk: attempt to read block outside ramdisk
3014
    (18*2*80 blocks) results in
2612
    (18*2*80 blocks) results in
3015
    * eax = 3
2613
    * eax = 3
3016
    * ebx = 0
2614
    * ebx = 0
3017
  * for successful read:
2615
  * for successful read:
3018
    * eax = ebx = 0
2616
    * eax = ebx = 0
3019
Remarks:
2617
Remarks:
3020
  * Block size is 512 bytes; function reads one block.
2618
  * Block size is 512 bytes; function reads one block.
3021
  * Do not depend on returned value, it can be changed
2619
  * Do not depend on returned value, it can be changed
3022
    in future versions.
2620
    in future versions.
3023
  * Function requires that LBA-access to devices is enabled by
2621
  * Function requires that LBA-access to devices is enabled by
3024
    subfunction 11 of function 21. To check this one can use
2622
    subfunction 11 of function 21. To check this one can use
3025
    subfunction 11 of function 26.
2623
    subfunction 11 of function 26.
3026
  * LBA-read of floppy is not supported.
2624
  * LBA-read of floppy is not supported.
3027
  * Function reads data on physical hard drive; if for any reason
2625
  * Function reads data on physical hard drive; if for any reason
3028
    data of the concrete partition are required, application must
2626
    data of the concrete partition are required, application must
3029
    define starting sector of this partition (either directly
2627
    define starting sector of this partition (either directly
3030
    through MBR, or from the full structure returned by
2628
    through MBR, or from the full structure returned by
3031
    subfunction 11 of function 18).
2629
    subfunction 11 of function 18).
3032
  * Function does not check error code of hard disk, so request of
2630
  * Function does not check error code of hard disk, so request of
3033
    nonexisting sector reads something (most probably it will be
2631
    nonexisting sector reads something (most probably it will be
3034
    zeroes, but this is defined by device) and this is considered
2632
    zeroes, but this is defined by device) and this is considered
3035
    as success (eax=0).
2633
    as success (eax=0).
3036
 
2634
 
3037
======================================================================
2635
======================================================================
3038
==== Function 58, subfunction 15 - get information on file system. ===
2636
==== Function 58, subfunction 15 - get information on file system. ===
3039
======================================================================
2637
======================================================================
3040
Parameters:
2638
Parameters:
3041
  * eax = 58 - function number
2639
  * eax = 58 - function number
3042
  * ebx = pointer to the information structure
2640
  * ebx = pointer to the information structure
3043
Format of the information structure:
2641
Format of the information structure:
3044
  * +0: dword: 15 = subfunction number
2642
  * +0: dword: 15 = subfunction number
3045
  * +4: dword: ignored
2643
  * +4: dword: ignored
3046
  * +8: dword: ignored
2644
  * +8: dword: ignored
3047
  * +12 = +0xC: dword: ignored
2645
  * +12 = +0xC: dword: ignored
3048
  * +16 = +0x10: dword: ignored
2646
  * +16 = +0x10: dword: ignored
3049
  * +20 = +0x14: (only second character is checked)
2647
  * +20 = +0x14: (only second character is checked)
3050
    /rd=/RAMDISK or /hd=/HARDDISK
2648
    /rd=/RAMDISK or /hd=/HARDDISK
3051
Returned value:
2649
Returned value:
3052
  * if the second character does not belong to set {'r','R','h','H'}:
2650
  * if the second character does not belong to set {'r','R','h','H'}:
3053
    * eax = 3
2651
    * eax = 3
3054
    * ebx = ecx = dword [fileinfo] = 0
2652
    * ebx = ecx = dword [fileinfo] = 0
3055
  * for ramdisk:
2653
  * for ramdisk:
3056
    * eax = 0 (success)
2654
    * eax = 0 (success)
3057
    * ebx = total number of clusters = 2847
2655
    * ebx = total number of clusters = 2847
3058
    * ecx = number of free clusters
2656
    * ecx = number of free clusters
3059
    * dword [fileinfo] = cluster size = 512
2657
    * dword [fileinfo] = cluster size = 512
3060
  * for hard disk: base and partition are defined by subfunctions
2658
  * for hard disk: base and partition are defined by subfunctions
3061
    7 and 8 of function 21:
2659
    7 and 8 of function 21:
3062
    * eax = 0 (success)
2660
    * eax = 0 (success)
3063
    * ebx = total number of clusters
2661
    * ebx = total number of clusters
3064
    * ecx = number of free clusters
2662
    * ecx = number of free clusters
3065
    * dword [fileinfo] = cluster size (in bytes)
2663
    * dword [fileinfo] = cluster size (in bytes)
3066
Remarks:
2664
Remarks:
3067
  * Be not surprised to strange layout of 4th returned parameter
2665
  * Be not surprised to strange layout of 4th returned parameter
3068
    - when this code was writing, at system calls application got
2666
    - when this code was writing, at system calls application got
3069
    only registers eax,ebx,ecx (from pushad-structure transmitted
2667
    only registers eax,ebx,ecx (from pushad-structure transmitted
3070
    as argument to the system function). Now it is corrected, so,
2668
    as argument to the system function). Now it is corrected, so,
3071
    probably, it is meaningful to return cluster size in edx, while
2669
    probably, it is meaningful to return cluster size in edx, while
3072
    this function is not used yet.
2670
    this function is not used yet.
3073
  * There exists also subfunction 11 of function 18,
2671
  * There exists also subfunction 11 of function 18,
3074
    which returns information on file system. From the full table
2672
    which returns information on file system. From the full table
3075
    of disk subsystem it is possible to deduce cluster size (there
2673
    of disk subsystem it is possible to deduce cluster size (there
3076
    it is stored in sectors) and total number of clusters
2674
    it is stored in sectors) and total number of clusters
3077
    for hard disks.
2675
    for hard disks.
3078
 
2676
 
3079
======================================================================
2677
======================================================================
3080
========== Function 60 - Inter Process Communication (IPC). ==========
2678
========== Function 60 - Inter Process Communication (IPC). ==========
3081
======================================================================
2679
======================================================================
3082
IPC is used for message dispatching from one process/thread to
2680
IPC is used for message dispatching from one process/thread to
3083
another. Previously it is necessary to agree how to interpret
2681
another. Previously it is necessary to agree how to interpret
3084
the concrete message.
2682
the concrete message.
3085
 
2683
 
3086
----------- Subfunction 1 - set the area for IPC receiving -----------
2684
----------- Subfunction 1 - set the area for IPC receiving -----------
3087
Is called by process-receiver.
2685
Is called by process-receiver.
3088
Parameters:
2686
Parameters:
3089
  * eax = 60 - function number
2687
  * eax = 60 - function number
3090
  * ebx = 1 - subfunction number
2688
  * ebx = 1 - subfunction number
3091
  * ecx = pointer to the buffer
2689
  * ecx = pointer to the buffer
3092
  * edx = size of the buffer
2690
  * edx = size of the buffer
3093
Returned value:
2691
Returned value:
3094
  * eax = 0 - always success
2692
  * eax = 0 - always success
3095
Format of IPC-buffer:
2693
Format of IPC-buffer:
3096
  * +0: dword: if nonzero, buffer is considered locked;
2694
  * +0: dword: if nonzero, buffer is considered locked;
3097
    lock/unlock the buffer, when you work with it and need that
2695
    lock/unlock the buffer, when you work with it and need that
3098
    buffer data are not changed from outside (no new messages)
2696
    buffer data are not changed from outside (no new messages)
3099
  * +4: dword: occupied place in the buffer (in bytes)
2697
  * +4: dword: occupied place in the buffer (in bytes)
3100
  * +8: first message
2698
  * +8: first message
3101
  * +8+n: second message
2699
  * +8+n: second message
3102
  * ...
2700
  * ...
3103
Format of a message:
2701
Format of a message:
3104
  * +0: dword: PID of sender
2702
  * +0: dword: PID of sender
3105
  * +4: dword: message length (not including this header)
2703
  * +4: dword: message length (not including this header)
3106
  * +8: n*byte: message data
2704
  * +8: n*byte: message data
3107
 
2705
 
3108
------------------ Subfunction 2 - send IPC message ------------------
2706
------------------ Subfunction 2 - send IPC message ------------------
3109
Is called by process-sender.
2707
Is called by process-sender.
3110
Parameters:
2708
Parameters:
3111
  * eax = 60 - function number
2709
  * eax = 60 - function number
3112
  * ebx = 2 - subfunction number
2710
  * ebx = 2 - subfunction number
3113
  * ecx = PID of receiver
2711
  * ecx = PID of receiver
3114
  * edx = pointer to the message data
2712
  * edx = pointer to the message data
3115
  * esi = message length (in bytes)
2713
  * esi = message length (in bytes)
3116
Returned value:
2714
Returned value:
3117
  * eax = 0 - success
2715
  * eax = 0 - success
3118
  * eax = 1 - the receiver has not defined buffer for IPC messages
2716
  * eax = 1 - the receiver has not defined buffer for IPC messages
3119
    (can be, still have no time,
2717
    (can be, still have no time,
3120
    and can be, this is not right process)
2718
    and can be, this is not right process)
3121
  * eax = 2 - the receiver has blocked IPC-buffer; try to wait a bit
2719
  * eax = 2 - the receiver has blocked IPC-buffer; try to wait a bit
3122
  * eax = 3 - overflow of IPC-buffer of the receiver
2720
  * eax = 3 - overflow of IPC-buffer of the receiver
3123
  * eax = 4 - process/thread with such PID does not exist
2721
  * eax = 4 - process/thread with such PID does not exist
3124
Remarks:
2722
Remarks:
3125
  * Immediately after writing of IPC-message to the buffer the system
2723
  * Immediately after writing of IPC-message to the buffer the system
3126
    sends to the receiver the event with code 7 (see event codes).
2724
    sends to the receiver the event with code 7 (see event codes).
3127
 
2725
 
3128
======================================================================
2726
======================================================================
3129
==== Function 61 - get parameters for the direct graphics access. ====
2727
==== Function 61 - get parameters for the direct graphics access. ====
3130
======================================================================
2728
======================================================================
3131
The data of the graphics screen (the memory area which displays
2729
The data of the graphics screen (the memory area which displays
3132
screen contents) are accessible to a program directly, without
2730
screen contents) are accessible to a program directly, without
3133
any system calls, through the selector gs:
2731
any system calls, through the selector gs:
3134
	mov	eax, [gs:0]
2732
	mov	eax, [gs:0]
3135
places in eax the first dword of the buffer, which contains
2733
places in eax the first dword of the buffer, which contains
3136
information on color of the left upper point (and, possibly, colors
2734
information on color of the left upper point (and, possibly, colors
3137
of several following).
2735
of several following).
3138
	mov	[gs:0], eax
2736
	mov	[gs:0], eax
3139
by work in VESA modes with LFB sets color of the left upper point
2737
by work in VESA modes with LFB sets color of the left upper point
3140
(and, possibly, colors of several following).
2738
(and, possibly, colors of several following).
3141
To interpret the data of graphics screen program needs to know
2739
To interpret the data of graphics screen program needs to know
3142
some parameters, returning by this function.
2740
some parameters, returning by this function.
3143
Remarks:
2741
Remarks:
3144
  * Graphics parameters changes very seldom at work,
2742
  * Graphics parameters changes very seldom at work,
3145
    namely, only in cases, when user works with the application VRR.
2743
    namely, only in cases, when user works with the application VRR.
3146
  * At videomode change the system redraws all windows (event
2744
  * At videomode change the system redraws all windows (event
3147
    with code 1) and redraws the background (event 5).
2745
    with code 1) and redraws the background (event 5).
3148
    Same events occur in other cases too, which meet much more often,
2746
    Same events occur in other cases too, which meet much more often,
3149
    than videomode change.
2747
    than videomode change.
3150
  * By operation in videomodes with LFB the selector gs points to
2748
  * By operation in videomodes with LFB the selector gs points to
3151
    LFB itself, so reading/writing on gs result directly in
2749
    LFB itself, so reading/writing on gs result directly in
3152
    change of screen contents. By operation in videomodes without
2750
    change of screen contents. By operation in videomodes without
3153
    LFB gs points to some data area in the kernel, and all functions
2751
    LFB gs points to some data area in the kernel, and all functions
3154
    of screen output fulfil honesty double operation on writing
2752
    of screen output fulfil honesty double operation on writing
3155
    directly to the screen and writing to this buffer. In result
2753
    directly to the screen and writing to this buffer. In result
3156
    at reading contents of this buffer the results correspond to
2754
    at reading contents of this buffer the results correspond to
3157
    screen contents (with, generally speaking, large color
2755
    screen contents (with, generally speaking, large color
3158
    resolution), and writing is ignored.
2756
    resolution), and writing is ignored.
3159
    One exception is the mode 320*200, for which main loop of the
2757
    One exception is the mode 320*200, for which main loop of the
3160
    system thread updates the screen according to mouse movements.
2758
    system thread updates the screen according to mouse movements.
3161
 
2759
 
3162
------------------------- Screen resolution --------------------------
2760
------------------------- Screen resolution --------------------------
3163
Parameters:
2761
Parameters:
3164
  * eax = 61 - function number
2762
  * eax = 61 - function number
3165
  * ebx = 1 - subfunction number
2763
  * ebx = 1 - subfunction number
3166
Returned value:
2764
Returned value:
3167
  * eax = [resolution on x axis]*65536 + [resolution on y axis]
2765
  * eax = [resolution on x axis]*65536 + [resolution on y axis]
3168
Remarks:
2766
Remarks:
3169
  * One can use function 14 paying attention that
2767
  * One can use function 14 paying attention that
3170
    it returns sizes on 1 pixel less. It is fully equivalent way.
2768
    it returns sizes on 1 pixel less. It is fully equivalent way.
3171
 
2769
 
3172
---------------------- Number of bits per pixel ----------------------
2770
---------------------- Number of bits per pixel ----------------------
3173
Parameters:
2771
Parameters:
3174
  * eax = 61 - function number
2772
  * eax = 61 - function number
3175
  * ebx = 2 - subfunction number
2773
  * ebx = 2 - subfunction number
3176
Returned value:
2774
Returned value:
3177
  * eax = number of bits per pixel (24 or 32)
2775
  * eax = number of bits per pixel (24 or 32)
3178
 
2776
 
3179
-------------------- Number of bytes per scanline --------------------
2777
-------------------- Number of bytes per scanline --------------------
3180
Parameters:
2778
Parameters:
3181
  * eax = 61 - function number
2779
  * eax = 61 - function number
3182
  * ebx = 3 - subfunction number
2780
  * ebx = 3 - subfunction number
3183
Returned value:
2781
Returned value:
3184
  * eax = number of bytes occupied by one scanline
2782
  * eax = number of bytes occupied by one scanline
3185
    (horizontal line on the screen)
2783
    (horizontal line on the screen)
3186
 
2784
 
3187
======================================================================
2785
======================================================================
3188
===== Function 62, subfunction 0 - get version of PCI-interface. =====
2786
===== Function 62, subfunction 0 - get version of PCI-interface. =====
3189
======================================================================
2787
======================================================================
3190
Parameters:
2788
Parameters:
3191
  * eax = 62 - function number
2789
  * eax = 62 - function number
3192
  * bl = 0 - subfunction number
2790
  * bl = 0 - subfunction number
3193
Returned value:
2791
Returned value:
3194
  * eax = -1 - PCI access is disabled; otherwise
2792
  * eax = -1 - PCI access is disabled; otherwise
3195
  * ah.al = version of PCI-interface (ah=version, al=subversion)
2793
  * ah.al = version of PCI-interface (ah=version, al=subversion)
3196
  * high word of eax is zeroed
2794
  * high word of eax is zeroed
3197
Remarks:
2795
Remarks:
3198
  * Previously low-level access to PCI for applications must be
2796
  * Previously low-level access to PCI for applications must be
3199
    enabled by subfunction 12 of function 21.
2797
    enabled by subfunction 12 of function 21.
3200
  * If PCI BIOS is not supported, the value of ax is undefined.
2798
  * If PCI BIOS is not supported, the value of ax is undefined.
3201
 
2799
 
3202
======================================================================
2800
======================================================================
3203
==== Function 62, subfunction 1 - get number of the last PCI-bus. ====
2801
==== Function 62, subfunction 1 - get number of the last PCI-bus. ====
3204
======================================================================
2802
======================================================================
3205
Parameters:
2803
Parameters:
3206
  * eax = 62 - function number
2804
  * eax = 62 - function number
3207
  * bl = 1 - subfunction number
2805
  * bl = 1 - subfunction number
3208
Returned value:
2806
Returned value:
3209
  * eax = -1 - access to PCI is disabled; otherwise
2807
  * eax = -1 - access to PCI is disabled; otherwise
3210
  * al = number of the last PCI-bus; other bytes of eax are destroyed
2808
  * al = number of the last PCI-bus; other bytes of eax are destroyed
3211
Remarks:
2809
Remarks:
3212
  * Previously low-level access to PCI for applications must be
2810
  * Previously low-level access to PCI for applications must be
3213
    enabled by subfunction 12 of function 21.
2811
    enabled by subfunction 12 of function 21.
3214
  * If PCI BIOS is not supported, the value of ax is undefined.
2812
  * If PCI BIOS is not supported, the value of ax is undefined.
3215
 
2813
 
3216
======================================================================
2814
======================================================================
3217
===================== Function 62, subfunction 2 =====================
2815
===================== Function 62, subfunction 2 =====================
3218
===== Get mechanism of addressing to the PCI configuration space. ====
2816
===== Get mechanism of addressing to the PCI configuration space. ====
3219
======================================================================
2817
======================================================================
3220
Parameters:
2818
Parameters:
3221
  * eax = 62 - function number
2819
  * eax = 62 - function number
3222
  * bl = 2 - subfunction number
2820
  * bl = 2 - subfunction number
3223
Returned value:
2821
Returned value:
3224
  * eax = -1 - access to PCI is disabled; otherwise
2822
  * eax = -1 - access to PCI is disabled; otherwise
3225
  * al = mechanism (1 or 2); other bytes of eax are destroyed
2823
  * al = mechanism (1 or 2); other bytes of eax are destroyed
3226
Remarks:
2824
Remarks:
3227
  * Previously low-level access to PCI for applications must be
2825
  * Previously low-level access to PCI for applications must be
3228
    enabled by subfunction 12 of function 21.
2826
    enabled by subfunction 12 of function 21.
3229
  * Addressing mechanism is selected depending on
2827
  * Addressing mechanism is selected depending on
3230
    equipment characteristics.
2828
    equipment characteristics.
3231
  * Subfunctions of read and write work automatically
2829
  * Subfunctions of read and write work automatically
3232
    with the selected mechanism.
2830
    with the selected mechanism.
3233
 
2831
 
3234
======================================================================
2832
======================================================================
3235
======== Function 62, subfunctions 4,5,6 - read PCI-register. ========
2833
======== Function 62, subfunctions 4,5,6 - read PCI-register. ========
3236
======================================================================
2834
======================================================================
3237
Parameters:
2835
Parameters:
3238
  * eax = 62 - function number
2836
  * eax = 62 - function number
3239
  * bl = 4 - read byte
2837
  * bl = 4 - read byte
3240
  * bl = 5 - read word
2838
  * bl = 5 - read word
3241
  * bl = 6 - read dword
2839
  * bl = 6 - read dword
3242
  * bh = number of PCI-bus
2840
  * bh = number of PCI-bus
3243
  * ch = dddddfff, where ddddd = number of the device on the bus,
2841
  * ch = dddddfff, where ddddd = number of the device on the bus,
3244
    fff = function number of device
2842
    fff = function number of device
3245
  * cl = number of register (must be even for bl=5,
2843
  * cl = number of register (must be even for bl=5,
3246
    divisible by 4 for bl=6)
2844
    divisible by 4 for bl=6)
3247
Returned value:
2845
Returned value:
3248
  * eax = -1 - error (access to PCI is disabled or parameters
2846
  * eax = -1 - error (access to PCI is disabled or parameters
3249
    are not supported); otherwise
2847
    are not supported); otherwise
3250
  * al/ax/eax (depending on requested size) contains the data;
2848
  * al/ax/eax (depending on requested size) contains the data;
3251
    the other part of register eax is destroyed
2849
    the other part of register eax is destroyed
3252
Remarks:
2850
Remarks:
3253
  * Previously low-level access to PCI for applications must be
2851
  * Previously low-level access to PCI for applications must be
3254
    enabled by subfunction 12 of function 21.
2852
    enabled by subfunction 12 of function 21.
3255
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2853
  * Access mechanism 2 supports only 16 devices on a bus and ignores
3256
    function number. To get access mechanism use subfunction 2.
2854
    function number. To get access mechanism use subfunction 2.
3257
  * Some registers are standard and exist for all devices, some are
2855
  * Some registers are standard and exist for all devices, some are
3258
    defined by the concrete device. The list of registers of the
2856
    defined by the concrete device. The list of registers of the
3259
    first type can be found e.g. in famous
2857
    first type can be found e.g. in famous
3260
    Interrupt List by Ralf Brown
2858
    Interrupt List by Ralf Brown
3261
    (http://www.pobox.com/~ralf/files.html,
2859
    (http://www.pobox.com/~ralf/files.html,
3262
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
2860
    ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/);
3263
    registers of the second type must be listed
2861
    registers of the second type must be listed
3264
    in the device documentation.
2862
    in the device documentation.
3265
 
2863
 
3266
======================================================================
2864
======================================================================
3267
====== Function 62, subfunctions 8,9,10 - write to PCI-register. =====
2865
====== Function 62, subfunctions 8,9,10 - write to PCI-register. =====
3268
======================================================================
2866
======================================================================
3269
Parameters:
2867
Parameters:
3270
  * eax = 62 - function number
2868
  * eax = 62 - function number
3271
  * bl = 8 - write byte
2869
  * bl = 8 - write byte
3272
  * bl = 9 - write word
2870
  * bl = 9 - write word
3273
  * bl = 10 - write dword
2871
  * bl = 10 - write dword
3274
  * bh = number of PCI-bus
2872
  * bh = number of PCI-bus
3275
  * ch = dddddfff, where ddddd = number of the device on the bus,
2873
  * ch = dddddfff, where ddddd = number of the device on the bus,
3276
    fff = function number of device
2874
    fff = function number of device
3277
  * cl = number of register (must be even for bl=9,
2875
  * cl = number of register (must be even for bl=9,
3278
    divisible by 4 for bl=10)
2876
    divisible by 4 for bl=10)
3279
  * dl/dx/edx (depending on requested size) contatins
2877
  * dl/dx/edx (depending on requested size) contatins
3280
    the data to write
2878
    the data to write
3281
Returned value:
2879
Returned value:
3282
  * eax = -1 - error (access to PCI is disabled or parameters
2880
  * eax = -1 - error (access to PCI is disabled or parameters
3283
    are not supported)
2881
    are not supported)
3284
  * eax = 0 - success
2882
  * eax = 0 - success
3285
Remarks:
2883
Remarks:
3286
  * Previously low-level access to PCI for applications must be
2884
  * Previously low-level access to PCI for applications must be
3287
    enabled by subfunction 12 of function 21.
2885
    enabled by subfunction 12 of function 21.
3288
  * Access mechanism 2 supports only 16 devices on a bus and ignores
2886
  * Access mechanism 2 supports only 16 devices on a bus and ignores
3289
    function number. To get access mechanism use subfunction 2.
2887
    function number. To get access mechanism use subfunction 2.
3290
  * Some registers are standard and exist for all devices, some are
2888
  * Some registers are standard and exist for all devices, some are
3291
    defined by the concrete device. The list of registers of the
2889
    defined by the concrete device. The list of registers of the
3292
    first type can be found e.g. in famous Interrupt List by
2890
    first type can be found e.g. in famous Interrupt List by
3293
    Ralf Brown; registers of the second type must be listed
2891
    Ralf Brown; registers of the second type must be listed
3294
    in the device documentation.
2892
    in the device documentation.
3295
 
2893
 
3296
======================================================================
2894
======================================================================
3297
============== Function 63 - work with the debug board. ==============
2895
============== Function 63 - work with the debug board. ==============
3298
======================================================================
2896
======================================================================
3299
The debug board is the global system buffer (with the size
2897
The debug board is the global system buffer (with the size
3300
1024 bytes), to which any program can write (generally speaking,
2898
1024 bytes), to which any program can write (generally speaking,
3301
arbitrary) data and from which other program can read these data.
2899
arbitrary) data and from which other program can read these data.
3302
By the agreement written data are text strings interpreted as
2900
By the agreement written data are text strings interpreted as
3303
debug messages on a course of program execution. The kernel in
2901
debug messages on a course of program execution. The kernel in
3304
some situations also writes to the debug board information on
2902
some situations also writes to the debug board information on
3305
execution of some functions; by the agreement kernel messages
2903
execution of some functions; by the agreement kernel messages
3306
begins from the prefix "K : ".
2904
begins from the prefix "K : ".
3307
For view of the debug board the application 'board' was created,
2905
For view of the debug board the application 'board' was created,
3308
which reads data from the buffer and displays them in its window.
2906
which reads data from the buffer and displays them in its window.
3309
'board' interpretes the sequence of codes 13,10 as newline.
2907
'board' interpretes the sequence of codes 13,10 as newline.
3310
A character with null code in an end of line is not necessary,
2908
A character with null code in an end of line is not necessary,
3311
but also does not prevent.
2909
but also does not prevent.
3312
Because debugger has been written, the value of the debug board
2910
Because debugger has been written, the value of the debug board
3313
has decreased, as debugger allows to inspect completely a course of
2911
has decreased, as debugger allows to inspect completely a course of
3314
program execution without any efforts from the direction of program
2912
program execution without any efforts from the direction of program
3315
itself. Nevertheless in some cases the debug board is still useful.
2913
itself. Nevertheless in some cases the debug board is still useful.
3316
 
2914
 
3317
----------------------------- Write byte -----------------------------
2915
----------------------------- Write byte -----------------------------
3318
Parameters:
2916
Parameters:
3319
  * eax = 63 - function number
2917
  * eax = 63 - function number
3320
  * ebx = 1 - subfunction number
2918
  * ebx = 1 - subfunction number
3321
  * cl = data byte
2919
  * cl = data byte
3322
Returned value:
2920
Returned value:
3323
  * function does not return value
2921
  * function does not return value
3324
Remarks:
2922
Remarks:
3325
  * Byte is written to the buffer. Buffer size is 512 bytes.
2923
  * Byte is written to the buffer. Buffer size is 512 bytes.
3326
    At buffer overflow all obtained data are lost.
2924
    At buffer overflow all obtained data are lost.
3327
  * For output to the debug board of more complicated objects
2925
  * For output to the debug board of more complicated objects
3328
    (strings, numbers) it is enough to call this function in cycle.
2926
    (strings, numbers) it is enough to call this function in cycle.
3329
    It is possible not to write the appropriate code manually and use
2927
    It is possible not to write the appropriate code manually and use
3330
    file 'debug.inc', which is included into the distributive.
2928
    file 'debug.inc', which is included into the distributive.
3331
 
2929
 
3332
----------------------------- Read byte ------------------------------
2930
----------------------------- Read byte ------------------------------
3333
Takes away byte from the buffer.
2931
Takes away byte from the buffer.
3334
Parameters:
2932
Parameters:
3335
  * eax = 63 - function number
2933
  * eax = 63 - function number
3336
  * ebx = 2 - subfunction number
2934
  * ebx = 2 - subfunction number
3337
Returned value:
2935
Returned value:
3338
  * eax = ebx = 0 - the buffer is empty
2936
  * eax = ebx = 0 - the buffer is empty
3339
  * eax = byte, ebx = 1 - byte was successfully read
2937
  * eax = byte, ebx = 1 - byte was successfully read
3340
 
2938
 
3341
======================================================================
2939
======================================================================
3342
============== Function 64 - resize application memory. ==============
2940
============== Function 64 - resize application memory. ==============
3343
======================================================================
2941
======================================================================
3344
Parameters:
2942
Parameters:
3345
  * eax = 64 - function number
2943
  * eax = 64 - function number
3346
  * ebx = 1 - unique subfunction
2944
  * ebx = 1 - unique subfunction
3347
  * ecx = new memory size
2945
  * ecx = new memory size
3348
Returned value:
2946
Returned value:
3349
  * eax = 0 - success
2947
  * eax = 0 - success
3350
  * eax = 1 - not enough memory
2948
  * eax = 1 - not enough memory
3351
Remarks:
2949
Remarks:
3352
  * There is another way to dynamically allocate/free memory -
2950
  * There is another way to dynamically allocate/free memory -
3353
    subfunctions 11, 12, 13 of function 68.
2951
    subfunctions 11, 12, 13 of function 68.
3354
  * The function cannot be used together with 68.11, 68.12, 68.13.
2952
  * The function cannot be used together with 68.11, 68.12, 68.13.
3355
    The function call will be ignored after creation of process heap
2953
    The function call will be ignored after creation of process heap
3356
    with function 68.11.
2954
    with function 68.11.
3357
 
2955
 
3358
======================================================================
2956
======================================================================
3359
======== Function 65 - draw image with palette in the window. ========
2957
======== Function 65 - draw image with palette in the window. ========
3360
======================================================================
2958
======================================================================
3361
Parameters:
2959
Parameters:
3362
  * eax = 65 - function number
2960
  * eax = 65 - function number
3363
  * ebx = pointer to the image
2961
  * ebx = pointer to the image
3364
  * ecx = [size on axis x]*65536 + [size on axis y]
2962
  * ecx = [size on axis x]*65536 + [size on axis y]
3365
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
2963
  * edx = [coordinate on axis x]*65536 + [coordinate on axis y]
3366
  * esi = number of bits per pixel, must be 1,2,4,8,9,15,16,24 or 32;
2964
  * esi = number of bits per pixel, must be 1,2,4,8,9,15,16,24 or 32;
3367
  * edi = pointer to palette (2 to the power esi colors 0x00RRGGBB);
2965
  * edi = pointer to palette (2 to the power esi colors 0x00RRGGBB);
3368
          ignored when esi > 8
2966
          ignored when esi > 8
3369
  * ebp = offset of next row data relative to previous row data
2967
  * ebp = offset of next row data relative to previous row data
3370
Returned value:
2968
Returned value:
3371
  * function does not return value
2969
  * function does not return value
3372
Remarks:
2970
Remarks:
3373
  * Coordinates of the image are coordinates of the upper left corner
2971
  * Coordinates of the image are coordinates of the upper left corner
3374
    of the image relative to the window.
2972
    of the image relative to the window.
3375
  * Format of image with 1 bit per pixel: each byte of image
2973
  * Format of image with 1 bit per pixel: each byte of image
3376
    (possibly excluding last bytes in rows), contains information on
2974
    (possibly excluding last bytes in rows), contains information on
3377
    the color of 8 pixels, MSB corresponds to first pixel.
2975
    the color of 8 pixels, MSB corresponds to first pixel.
3378
  * Format of image with 2 bits per pixel: each byte of image
2976
  * Format of image with 2 bits per pixel: each byte of image
3379
    (possibly excluding last bytes in rows), contains information on
2977
    (possibly excluding last bytes in rows), contains information on
3380
    the color of 4 pixels, two MSBs correspond to first pixel.
2978
    the color of 4 pixels, two MSBs correspond to first pixel.
3381
  * Format of image with 4 bits per pixel: each byte of image
2979
  * Format of image with 4 bits per pixel: each byte of image
3382
    excluding last bytes in rows (if width is odd) contains
2980
    excluding last bytes in rows (if width is odd) contains
3383
    information on the color of 2 pixels, high-order tetrad
2981
    information on the color of 2 pixels, high-order tetrad
3384
    corresponds to first pixel.
2982
    corresponds to first pixel.
3385
  * Format of image with 8 bits per pixel: each byte of image is
2983
  * Format of image with 8 bits per pixel: each byte of image is
3386
    index in the palette.
2984
    index in the palette.
3387
  * Format of image with 9 bits per pixel: array of one byte values;
2985
  * Format of image with 9 bits per pixel: array of one byte values;
3388
    each byte (8 bit) represents the intensity of gray for one pixel;
2986
    each byte (8 bit) represents the intensity of gray for one pixel;
3389
    this format is equal to 8bpp without palette.
2987
    this format is equal to 8bpp without palette.
3390
  * Format of image with 15 bits per pixel: the color of each pixel
2988
  * Format of image with 15 bits per pixel: the color of each pixel
3391
    is coded as (bit representation) 0RRRRRGGGGGBBBBB - 5 bits per
2989
    is coded as (bit representation) 0RRRRRGGGGGBBBBB - 5 bits per
3392
    each color.
2990
    each color.
3393
  * Format of image with 16 bits per pixel: the color of each pixel
2991
  * Format of image with 16 bits per pixel: the color of each pixel
3394
    is coded as RRRRRGGGGGGBBBBB (5+6+5).
2992
    is coded as RRRRRGGGGGGBBBBB (5+6+5).
3395
  * Format of image with 24 bits per pixel: the color of each pixel
2993
  * Format of image with 24 bits per pixel: the color of each pixel
3396
    is coded as 3 bytes - sequentially blue, green, red components.
2994
    is coded as 3 bytes - sequentially blue, green, red components.
3397
  * Format of image with 32 bits per pixel: similar to 24, but
2995
  * Format of image with 32 bits per pixel: similar to 24, but
3398
    one additional ignored byte is present.
2996
    one additional ignored byte is present.
3399
  * The call to function 7 is equivalent to call to this function
2997
  * The call to function 7 is equivalent to call to this function
3400
    with esi=24, ebp=0.
2998
    with esi=24, ebp=0.
3401
 
2999
 
3402
======================================================================
3000
======================================================================
3403
================== Function 66 - work with keyboard. =================
3001
================== Function 66 - work with keyboard. =================
3404
======================================================================
3002
======================================================================
3405
The input mode influences results of reading keys by function 2.
3003
The input mode influences results of reading keys by function 2.
3406
When a program loads, ASCII input mode is set for it.
3004
When a program loads, ASCII input mode is set for it.
3407
 
3005
 
3408
-------------- Subfunction 1 - set keyboard input mode. --------------
3006
-------------- Subfunction 1 - set keyboard input mode. --------------
3409
Parameters:
3007
Parameters:
3410
  * eax = 66 - function number
3008
  * eax = 66 - function number
3411
  * ebx = 1 - subfunction number
3009
  * ebx = 1 - subfunction number
3412
  * ecx = mode:
3010
  * ecx = mode:
3413
    * 0 = normal (ASCII-characters)
3011
    * 0 = normal (ASCII-characters)
3414
    * 1 = scancodes
3012
    * 1 = scancodes
3415
Returned value:
3013
Returned value:
3416
  * function does not return value
3014
  * function does not return value
3417
 
3015
 
3418
-------------- Subfunction 2 - get keyboard input mode. --------------
3016
-------------- Subfunction 2 - get keyboard input mode. --------------
3419
Parameters:
3017
Parameters:
3420
  * eax = 66 - function number
3018
  * eax = 66 - function number
3421
  * ebx = 2 - subfunction number
3019
  * ebx = 2 - subfunction number
3422
Returned value:
3020
Returned value:
3423
  * eax = current mode
3021
  * eax = current mode
3424
 
3022
 
3425
------------ Subfunction 3 - get status of control keys. -------------
3023
------------ Subfunction 3 - get status of control keys. -------------
3426
Parameters:
3024
Parameters:
3427
  * eax = 66 - function number
3025
  * eax = 66 - function number
3428
  * ebx = 3 - subfunction number
3026
  * ebx = 3 - subfunction number
3429
Returned value:
3027
Returned value:
3430
  * eax = bit mask:
3028
  * eax = bit mask:
3431
  * bit 0  (mask 1): left Shift is pressed
3029
  * bit 0  (mask 1): left Shift is pressed
3432
  * bit 1  (mask 2): right Shift is pressed
3030
  * bit 1  (mask 2): right Shift is pressed
3433
  * bit 2  (mask 4): left Ctrl is pressed
3031
  * bit 2  (mask 4): left Ctrl is pressed
3434
  * bit 3  (mask 8): right Ctrl is pressed
3032
  * bit 3  (mask 8): right Ctrl is pressed
3435
  * bit 4  (mask 0x10): left Alt is pressed
3033
  * bit 4  (mask 0x10): left Alt is pressed
3436
  * bit 5  (mask 0x20): right Alt is pressed
3034
  * bit 5  (mask 0x20): right Alt is pressed
3437
  * bit 6  (mask 0x40): CapsLock is on
3035
  * bit 6  (mask 0x40): CapsLock is on
3438
  * bit 7  (mask 0x80): NumLock is on
3036
  * bit 7  (mask 0x80): NumLock is on
3439
  * bit 8  (mask 0x100): ScrollLock is on
3037
  * bit 8  (mask 0x100): ScrollLock is on
3440
  * bit 9  (mask 0x200): left Win is pressed
3038
  * bit 9  (mask 0x200): left Win is pressed
3441
  * bit 10 (mask 0x400): right Win is pressed
3039
  * bit 10 (mask 0x400): right Win is pressed
3442
  * other bits are cleared
3040
  * other bits are cleared
3443
 
3041
 
3444
-------------- Subfunction 4 - set system-wide hotkey. ---------------
3042
-------------- Subfunction 4 - set system-wide hotkey. ---------------
3445
When hotkey is pressed, the system notifies only those applications,
3043
When hotkey is pressed, the system notifies only those applications,
3446
which have installed it; the active application (which receives
3044
which have installed it; the active application (which receives
3447
all normal input) does not receive such keys.
3045
all normal input) does not receive such keys.
3448
The notification consists in sending event with the code 2.
3046
The notification consists in sending event with the code 2.
3449
Reading hotkey is the same as reading normal key - by function 2.
3047
Reading hotkey is the same as reading normal key - by function 2.
3450
Parameters:
3048
Parameters:
3451
  * eax = 66 - function number
3049
  * eax = 66 - function number
3452
  * ebx = 4 - subfunction number
3050
  * ebx = 4 - subfunction number
3453
  * cl determines key scancode;
3051
  * cl determines key scancode;
3454
    use cl=0 to give combinations such as Ctrl+Shift
3052
    use cl=0 to give combinations such as Ctrl+Shift
3455
  * edx = 0xXYZ determines possible states of control keys:
3053
  * edx = 0xXYZ determines possible states of control keys:
3456
    * Z (low 4 bits) determines state of LShift and RShift:
3054
    * Z (low 4 bits) determines state of LShift and RShift:
3457
      * 0 = no key must be pressed;
3055
      * 0 = no key must be pressed;
3458
      * 1 = exactly one key must be pressed;
3056
      * 1 = exactly one key must be pressed;
3459
      * 2 = both keys must be pressed;
3057
      * 2 = both keys must be pressed;
3460
      * 3 = must be pressed LShift, but not RShift;
3058
      * 3 = must be pressed LShift, but not RShift;
3461
      * 4 = must be pressed RShift, but not LShift
3059
      * 4 = must be pressed RShift, but not LShift
3462
    * Y - similar for LCtrl and RCtrl;
3060
    * Y - similar for LCtrl and RCtrl;
3463
    * X - similar for LAlt and RAlt
3061
    * X - similar for LAlt and RAlt
3464
Returned value:
3062
Returned value:
3465
  * eax=0 - success
3063
  * eax=0 - success
3466
  * eax=1 - too mant hotkeys (maximum 256 are allowed)
3064
  * eax=1 - too mant hotkeys (maximum 256 are allowed)
3467
Remarks:
3065
Remarks:
3468
  * Hotkey can work either at pressing or at release. Release
3066
  * Hotkey can work either at pressing or at release. Release
3469
    scancode of a key is more on 128 than pressing scancode
3067
    scancode of a key is more on 128 than pressing scancode
3470
    (i.e. high bit is set).
3068
    (i.e. high bit is set).
3471
  * Several applications can set the same combination;
3069
  * Several applications can set the same combination;
3472
    all such applications will be informed on pressing
3070
    all such applications will be informed on pressing
3473
    such combination.
3071
    such combination.
3474
 
3072
 
3475
-------------- Subfunction 5 - delete installed hotkey. --------------
3073
-------------- Subfunction 5 - delete installed hotkey. --------------
3476
Parameters:
3074
Parameters:
3477
  * eax = 66 - function number
3075
  * eax = 66 - function number
3478
  * ebx = 5 - subfunction number
3076
  * ebx = 5 - subfunction number
3479
  * cl = scancode of key and edx = 0xXYZ the same as in subfunction 4
3077
  * cl = scancode of key and edx = 0xXYZ the same as in subfunction 4
3480
Returned value:
3078
Returned value:
3481
  * eax = 0 - success
3079
  * eax = 0 - success
3482
  * eax = 1 - there is no such hotkey
3080
  * eax = 1 - there is no such hotkey
3483
Remarks:
3081
Remarks:
3484
  * When a process/thread terminates, all hotkey installed by it are
3082
  * When a process/thread terminates, all hotkey installed by it are
3485
    deleted.
3083
    deleted.
3486
  * The call to this subfunction does not affect other applications.
3084
  * The call to this subfunction does not affect other applications.
3487
    If other application has defined the same combination, it will
3085
    If other application has defined the same combination, it will
3488
    still receive notices.
3086
    still receive notices.
3489
 
3087
 
3490
--------------- Subfunction 6 - block the normal input. --------------
3088
--------------- Subfunction 6 - block the normal input. --------------
3491
Parameters:
3089
Parameters:
3492
  * eax = 66 - function number
3090
  * eax = 66 - function number
3493
  * ebx = 6 - subfunction number
3091
  * ebx = 6 - subfunction number
3494
Returned value:
3092
Returned value:
3495
  * function does not return value
3093
  * function does not return value
3496
Remarks:
3094
Remarks:
3497
  * Blocking the normal keyboard input for installed hotkeys
3095
  * Blocking the normal keyboard input for installed hotkeys
3498
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3096
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3499
 
3097
 
3500
------------ Subfunction 7 - unlock the normal input. ----------------
3098
------------ Subfunction 7 - unlock the normal input. ----------------
3501
Parameters:
3099
Parameters:
3502
  * eax = 66 - function number
3100
  * eax = 66 - function number
3503
  * ebx = 7 - subfunction number
3101
  * ebx = 7 - subfunction number
3504
Returned value:
3102
Returned value:
3505
  * function does not return value
3103
  * function does not return value
3506
Remarks:
3104
Remarks:
3507
  * Unlocking the results of the f. 66.6
3105
  * Unlocking the results of the f. 66.6
3508
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3106
  * To emulate a mouse via the keyboard, the application MOUSEMUL
3509
 
3107
 
3510
======================================================================
3108
======================================================================
3511
========= Function 67 - change position/sizes of the window. =========
3109
========= Function 67 - change position/sizes of the window. =========
3512
======================================================================
3110
======================================================================
3513
Parameters:
3111
Parameters:
3514
  * eax = 67 - function number
3112
  * eax = 67 - function number
3515
  * ebx = new x-coordinate of the window
3113
  * ebx = new x-coordinate of the window
3516
  * ecx = new y-coordinate of the window
3114
  * ecx = new y-coordinate of the window
3517
  * edx = new x-size of the window
3115
  * edx = new x-size of the window
3518
  * esi = new y-size of the window
3116
  * esi = new y-size of the window
3519
Returned value:
3117
Returned value:
3520
  * function does not return value
3118
  * function does not return value
3521
Remarks:
3119
Remarks:
3522
  * The value -1 for a parameter means "do not change"; e.g. to move
3120
  * The value -1 for a parameter means "do not change"; e.g. to move
3523
    the window without resizing it is possible to specify edx=esi=-1.
3121
    the window without resizing it is possible to specify edx=esi=-1.
3524
  * Previously the window must be defined by function 0.
3122
  * Previously the window must be defined by function 0.
3525
    It sets initial coordinates and sizes of the window.
3123
    It sets initial coordinates and sizes of the window.
3526
  * Sizes of the window are understood in sense of function 0,
3124
  * Sizes of the window are understood in sense of function 0,
3527
    that is one pixel less than real sizes.
3125
    that is one pixel less than real sizes.
3528
  * The function call for maximized windows is simply ignored.
3126
  * The function call for maximized windows is simply ignored.
3529
  * For windows of appropriate styles position and/or sizes can be
3127
  * For windows of appropriate styles position and/or sizes can be
3530
    changed by user; current position and sizes can be obtained by
3128
    changed by user; current position and sizes can be obtained by
3531
    call to function 9.
3129
    call to function 9.
3532
  * The function sends to the window redraw event (with the code 1).
3130
  * The function sends to the window redraw event (with the code 1).
3533
 
3131
 
3534
======================================================================
3132
======================================================================
3535
====== Function 68, subfunction 0 - get the task switch counter. =====
3133
====== Function 68, subfunction 0 - get the task switch counter. =====
3536
======================================================================
3134
======================================================================
3537
Parameters:
3135
Parameters:
3538
  * eax = 68 - function number
3136
  * eax = 68 - function number
3539
  * ebx = 0 - subfunction number
3137
  * ebx = 0 - subfunction number
3540
Returned value:
3138
Returned value:
3541
  * eax = number of task switches from the system booting
3139
  * eax = number of task switches from the system booting
3542
    (modulo 2^32)
3140
    (modulo 2^32)
3543
 
3141
 
3544
======================================================================
3142
======================================================================
3545
======= Function 68, subfunction 1 - switch to the next thread. ======
3143
======= Function 68, subfunction 1 - switch to the next thread. ======
3546
======================================================================
3144
======================================================================
3547
The function completes the current time slice allocated to the
3145
The function completes the current time slice allocated to the
3548
thread and switches to the next. (Which thread in which process
3146
thread and switches to the next. (Which thread in which process
3549
will be next, is unpredictable). Later, when execution queue
3147
will be next, is unpredictable). Later, when execution queue
3550
will reach the current thread, execution will be continued.
3148
will reach the current thread, execution will be continued.
3551
Parameters:
3149
Parameters:
3552
  * eax = 68 - function number
3150
  * eax = 68 - function number
3553
  * ebx = 1 - subfunction number
3151
  * ebx = 1 - subfunction number
3554
Returned value:
3152
Returned value:
3555
  * function does not return value
3153
  * function does not return value
3556
 
3154
 
3557
======================================================================
3155
======================================================================
3558
============= Function 68, subfunction 2 - cache + rdpmc. ============
3156
============= Function 68, subfunction 2 - cache + rdpmc. ============
3559
======================================================================
3157
======================================================================
3560
Parameters:
3158
Parameters:
3561
  * eax = 68 - function number
3159
  * eax = 68 - function number
3562
  * ebx = 2 - subfunction number
3160
  * ebx = 2 - subfunction number
3563
  * ecx = required action:
3161
  * ecx = required action:
3564
    * ecx = 0 - enable instruction 'rdpmc'
3162
    * ecx = 0 - enable instruction 'rdpmc'
3565
      (ReaD Performance-Monitoring Counters) for applications
3163
      (ReaD Performance-Monitoring Counters) for applications
3566
    * ecx = 1 - find out whether cache is disabled/enabled
3164
    * ecx = 1 - find out whether cache is disabled/enabled
3567
    * ecx = 2 - enable cache
3165
    * ecx = 2 - enable cache
3568
    * ecx = 3 - disable cache
3166
    * ecx = 3 - disable cache
3569
Returned value:
3167
Returned value:
3570
  * for ecx=0:
3168
  * for ecx=0:
3571
    * eax = the value of cr4
3169
    * eax = the value of cr4
3572
  * for ecx=1:
3170
  * for ecx=1:
3573
    * eax = (cr0 and 0x60000000):
3171
    * eax = (cr0 and 0x60000000):
3574
    * eax = 0 - cache is on
3172
    * eax = 0 - cache is on
3575
    * eax <> 0 - cache is off
3173
    * eax <> 0 - cache is off
3576
  * for ecx=2 and ecx=3:
3174
  * for ecx=2 and ecx=3:
3577
    * function does not return value
3175
    * function does not return value
3578
 
3176
 
3579
======================================================================
3177
======================================================================
3580
=========== Function 68, subfunction 3 - read MSR-register. ==========
3178
=========== Function 68, subfunction 3 - read MSR-register. ==========
3581
======================================================================
3179
======================================================================
3582
MSR = Model Specific Register; the complete list of MSR-registers
3180
MSR = Model Specific Register; the complete list of MSR-registers
3583
of a processor is included to the documentation on it (for example,
3181
of a processor is included to the documentation on it (for example,
3584
IA-32 Intel Architecture Software Developer's Manual,
3182
IA-32 Intel Architecture Software Developer's Manual,
3585
Volume 3, Appendix B); each processor family has its own subset
3183
Volume 3, Appendix B); each processor family has its own subset
3586
of the MSR-registers.
3184
of the MSR-registers.
3587
Parameters:
3185
Parameters:
3588
  * eax = 68 - function number
3186
  * eax = 68 - function number
3589
  * ebx = 3 - subfunction number
3187
  * ebx = 3 - subfunction number
3590
  * ecx is ignored
3188
  * ecx is ignored
3591
  * edx = MSR address
3189
  * edx = MSR address
3592
Returned value:
3190
Returned value:
3593
  * ebx:eax = high:low dword of the result
3191
  * ebx:eax = high:low dword of the result
3594
Remarks:
3192
Remarks:
3595
  * If ecx contains nonexistent or not implemented for this processor
3193
  * If ecx contains nonexistent or not implemented for this processor
3596
    MSR, processor will generate an exception in the kernel, which
3194
    MSR, processor will generate an exception in the kernel, which
3597
    will kill the thread.
3195
    will kill the thread.
3598
  * Previously it is necessary to check, whether MSRs are supported
3196
  * Previously it is necessary to check, whether MSRs are supported
3599
    as a whole, with the instruction 'cpuid'. Otherwise processor
3197
    as a whole, with the instruction 'cpuid'. Otherwise processor
3600
    will generate other exception in the kernel, which will anyway
3198
    will generate other exception in the kernel, which will anyway
3601
    kill the thread.
3199
    kill the thread.
3602
 
3200
 
3603
======================================================================
3201
======================================================================
3604
========= Function 68, subfunction 4 - write to MSR-register. ========
3202
========= Function 68, subfunction 4 - write to MSR-register. ========
3605
======================================================================
3203
======================================================================
3606
MSR = Model Specific Register; the complete list of MSR-registers
3204
MSR = Model Specific Register; the complete list of MSR-registers
3607
of a processor is included to the documentation on it (for example,
3205
of a processor is included to the documentation on it (for example,
3608
IA-32 Intel Architecture Software Developer's Manual,
3206
IA-32 Intel Architecture Software Developer's Manual,
3609
Volume 3, Appendix B); each processor family has its own subset
3207
Volume 3, Appendix B); each processor family has its own subset
3610
of the MSR-registers.
3208
of the MSR-registers.
3611
Parameters:
3209
Parameters:
3612
  * eax = 68 - function number
3210
  * eax = 68 - function number
3613
  * ebx = 4 - subfunction number
3211
  * ebx = 4 - subfunction number
3614
  * ecx is ignored
3212
  * ecx is ignored
3615
  * edx = MSR address
3213
  * edx = MSR address
3616
  * esi:edi = high:low dword
3214
  * esi:edi = high:low dword
3617
Returned value:
3215
Returned value:
3618
  * function does not return value
3216
  * function does not return value
3619
Remarks:
3217
Remarks:
3620
  * If ecx contains nonexistent or not implemented for this processor
3218
  * If ecx contains nonexistent or not implemented for this processor
3621
    MSR, processor will generate an exception in the kernel, which
3219
    MSR, processor will generate an exception in the kernel, which
3622
    will kill the thread.
3220
    will kill the thread.
3623
  * Previously it is necessary to check, whether MSRs are supported
3221
  * Previously it is necessary to check, whether MSRs are supported
3624
    as a whole, with the instruction 'cpuid'. Otherwise processor
3222
    as a whole, with the instruction 'cpuid'. Otherwise processor
3625
    will generate other exception in the kernel, which will anyway
3223
    will generate other exception in the kernel, which will anyway
3626
    kill the thread.
3224
    kill the thread.
3627
 
3225
 
3628
======================================================================
3226
======================================================================
3629
======= Function 68, subfunction 11 - initialize process heap. =======
3227
======= Function 68, subfunction 11 - initialize process heap. =======
3630
======================================================================
3228
======================================================================
3631
Parameters:
3229
Parameters:
3632
  * eax = 68 - function number
3230
  * eax = 68 - function number
3633
  * ebx = 11 - subfunction number
3231
  * ebx = 11 - subfunction number
3634
Returned value:
3232
Returned value:
3635
  * eax = 0 - failed
3233
  * eax = 0 - failed
3636
  * otherwise size of created heap
3234
  * otherwise size of created heap
3637
Remarks:
3235
Remarks:
3638
  * The function call initializes heap, from which one can in future
3236
  * The function call initializes heap, from which one can in future
3639
    allocate and free memory blocks with subfunctions 12 and 13.
3237
    allocate and free memory blocks with subfunctions 12 and 13.
3640
    Heap size is equal to total amount of free application memory.
3238
    Heap size is equal to total amount of free application memory.
3641
  * The second function call from the same process results in
3239
  * The second function call from the same process results in
3642
    returning the size of the existing heap.
3240
    returning the size of the existing heap.
3643
  * After creation of the heap calls to function 64 will be ignored.
3241
  * After creation of the heap calls to function 64 will be ignored.
3644
 
3242
 
3645
======================================================================
3243
======================================================================
3646
======== Function 68, subfunction 12 - allocate memory block. ========
3244
======== Function 68, subfunction 12 - allocate memory block. ========
3647
======================================================================
3245
======================================================================
3648
Parameters:
3246
Parameters:
3649
  * eax = 68 - function number
3247
  * eax = 68 - function number
3650
  * ebx = 12 - subfunction number
3248
  * ebx = 12 - subfunction number
3651
  * ecx = required size in bytes
3249
  * ecx = required size in bytes
3652
Returned value:
3250
Returned value:
3653
  * eax = pointer to the allocated block
3251
  * eax = pointer to the allocated block
3654
Remarks:
3252
Remarks:
3655
  * Before this call one must initialize process heap by call to
3253
  * Before this call one must initialize process heap by call to
3656
    subfunction 11.
3254
    subfunction 11.
3657
  * The function allocates an integer number of pages (4 Kb) in such
3255
  * The function allocates an integer number of pages (4 Kb) in such
3658
    way that the real size of allocated block is more than or equal to
3256
    way that the real size of allocated block is more than or equal to
3659
    requested size.
3257
    requested size.
3660
 
3258
 
3661
======================================================================
3259
======================================================================
3662
========== Function 68, subfunction 13 - free memory block. ==========
3260
========== Function 68, subfunction 13 - free memory block. ==========
3663
======================================================================
3261
======================================================================
3664
Parameters:
3262
Parameters:
3665
  * eax = 68 - function number
3263
  * eax = 68 - function number
3666
  * ebx = 13 - subfunction number
3264
  * ebx = 13 - subfunction number
3667
  * ecx = pointer to the memory block
3265
  * ecx = pointer to the memory block
3668
Returned value:
3266
Returned value:
3669
  * eax = 1 - success
3267
  * eax = 1 - success
3670
  * eax = 0 - failed
3268
  * eax = 0 - failed
3671
Remarks:
3269
Remarks:
3672
  * The memory block must have been allocated by subfunction 12
3270
  * The memory block must have been allocated by subfunction 12
3673
    or subfunction 20.
3271
    or subfunction 20.
3674
 
3272
 
3675
======================================================================
3273
======================================================================
3676
===================== Function 68, subfunction 14 ====================
3274
===================== Function 68, subfunction 14 ====================
3677
============ Wait for signal from another program/driver. ============
3275
============ Wait for signal from another program/driver. ============
3678
======================================================================
3276
======================================================================
3679
Parameters:
3277
Parameters:
3680
  * eax = 68 - function number
3278
  * eax = 68 - function number
3681
  * ebx = 14 - subfunction number
3279
  * ebx = 14 - subfunction number
3682
  * ecx = pointer to the buffer for information (24 bytes)
3280
  * ecx = pointer to the buffer for information (24 bytes)
3683
Returned value:
3281
Returned value:
3684
  * buffer pointed to by ecx contains the following information:
3282
  * buffer pointed to by ecx contains the following information:
3685
    * +0: dword: identifier for following data of signal
3283
    * +0: dword: identifier for following data of signal
3686
    * +4: dword: data of signal (20 bytes), format of which is defined
3284
    * +4: dword: data of signal (20 bytes), format of which is defined
3687
          by the first dword
3285
          by the first dword
3688
 
3286
 
3689
======================================================================
3287
======================================================================
3690
============= Function 68, subfunction 16 - load driver. =============
3288
============= Function 68, subfunction 16 - load driver. =============
3691
======================================================================
3289
======================================================================
3692
Parameters:
3290
Parameters:
3693
  * eax = 68 - function number
3291
  * eax = 68 - function number
3694
  * ebx = 16 - subfunction number
3292
  * ebx = 16 - subfunction number
3695
  * ecx = pointer to ASCIIZ-string with driver name
3293
  * ecx = pointer to ASCIIZ-string with driver name
3696
Returned value:
3294
Returned value:
3697
  * eax = 0 - failed
3295
  * eax = 0 - failed
3698
  * otherwise eax = driver handle
3296
  * otherwise eax = driver handle
3699
Remarks:
3297
Remarks:
3700
  * If the driver was not loaded yet, it is loaded;
3298
  * If the driver was not loaded yet, it is loaded;
3701
    if the driver was loaded yet, nothing happens.
3299
    if the driver was loaded yet, nothing happens.
3702
  * Driver name is case-sensitive.
3300
  * Driver name is case-sensitive.
3703
    Maximum length of the name is 16 characters, including
3301
    Maximum length of the name is 16 characters, including
3704
    terminating null character, the rest is ignored.
3302
    terminating null character, the rest is ignored.
3705
  * Driver ABC is loaded from file /rd/1/drivers/ABC.obj.
3303
  * Driver ABC is loaded from file /rd/1/drivers/ABC.obj.
3706
 
3304
 
3707
======================================================================
3305
======================================================================
3708
============ Function 68, subfunction 17 - driver control. ===========
3306
============ Function 68, subfunction 17 - driver control. ===========
3709
======================================================================
3307
======================================================================
3710
Parameters:
3308
Parameters:
3711
  * eax = 68 - function number
3309
  * eax = 68 - function number
3712
  * ebx = 17 - subfunction number
3310
  * ebx = 17 - subfunction number
3713
  * ecx = pointer to the control structure:
3311
  * ecx = pointer to the control structure:
3714
    * +0: dword: handle of driver
3312
    * +0: dword: handle of driver
3715
    * +4: dword: code of driver function
3313
    * +4: dword: code of driver function
3716
    * +8: dword: pointer to input data
3314
    * +8: dword: pointer to input data
3717
    * +12 = +0xC: dword: size of input data
3315
    * +12 = +0xC: dword: size of input data
3718
    * +16 = +0x10: dword: pointer to output data
3316
    * +16 = +0x10: dword: pointer to output data
3719
    * +20 = +0x14: dword: size of output data
3317
    * +20 = +0x14: dword: size of output data
3720
Returned value:
3318
Returned value:
3721
  * eax = determined by driver
3319
  * eax = determined by driver
3722
Remarks:
3320
Remarks:
3723
  * Function codes and the structure of input/output data
3321
  * Function codes and the structure of input/output data
3724
    are defined by driver.
3322
    are defined by driver.
3725
  * Previously one must obtain driver handle by subfunction 16.
3323
  * Previously one must obtain driver handle by subfunction 16.
3726
 
3324
 
3727
======================================================================
3325
======================================================================
3728
=============== Function 68, subfunction 19 - load DLL. ==============
3326
=============== Function 68, subfunction 19 - load DLL. ==============
3729
======================================================================
3327
======================================================================
3730
Parameters:
3328
Parameters:
3731
  * eax = 68 - function number
3329
  * eax = 68 - function number
3732
  * ebx = 19 - subfunction number
3330
  * ebx = 19 - subfunction number
3733
  * ecx = pointer to ASCIIZ-string with the full path to DLL
3331
  * ecx = pointer to ASCIIZ-string with the full path to DLL
3734
Returned value:
3332
Returned value:
3735
  * eax = 0 - failed
3333
  * eax = 0 - failed
3736
  * otherwise eax = pointer to DLL export table
3334
  * otherwise eax = pointer to DLL export table
3737
Remarks:
3335
Remarks:
3738
  * Export table is an array of structures of 2 dword's, terminated
3336
  * Export table is an array of structures of 2 dword's, terminated
3739
    by zero. The first dword in structure points to function name,
3337
    by zero. The first dword in structure points to function name,
3740
    the second dword contains address of function.
3338
    the second dword contains address of function.
3741
 
3339
 
3742
======================================================================
3340
======================================================================
3743
======= Function 68, subfunction 20 - reallocate memory block. =======
3341
======= Function 68, subfunction 20 - reallocate memory block. =======
3744
======================================================================
3342
======================================================================
3745
Parameters:
3343
Parameters:
3746
  * eax = 68 - function number
3344
  * eax = 68 - function number
3747
  * ebx = 20 - subfunction number
3345
  * ebx = 20 - subfunction number
3748
  * ecx = new size in bytes
3346
  * ecx = new size in bytes
3749
  * edx = pointer to already allocated block
3347
  * edx = pointer to already allocated block
3750
Returned value:
3348
Returned value:
3751
  * eax = pointer to the reallocated block, 0 = error
3349
  * eax = pointer to the reallocated block, 0 = error
3752
Remarks:
3350
Remarks:
3753
  * Before this call one must initialize process heap by call to
3351
  * Before this call one must initialize process heap by call to
3754
    subfunction 11.
3352
    subfunction 11.
3755
  * The function allocates an integer number of pages (4 Kb) in such
3353
  * The function allocates an integer number of pages (4 Kb) in such
3756
    way that the real size of allocated block is more than or equal to
3354
    way that the real size of allocated block is more than or equal to
3757
    requested size.
3355
    requested size.
3758
  * If edx=0, the function call is equivalent to memory allocation
3356
  * If edx=0, the function call is equivalent to memory allocation
3759
    with subfunction 12. Otherwise the block at edx
3357
    with subfunction 12. Otherwise the block at edx
3760
    must be allocated earlier with subfunction 12 or this subfunction.
3358
    must be allocated earlier with subfunction 12 or this subfunction.
3761
  * If ecx=0, the function frees memory block at edx and returns 0.
3359
  * If ecx=0, the function frees memory block at edx and returns 0.
3762
  * The contents of the block are unchanged up to the shorter of
3360
  * The contents of the block are unchanged up to the shorter of
3763
    the new and old sizes.
3361
    the new and old sizes.
3764
 
3362
 
3765
======================================================================
3363
======================================================================
3766
=========== Function 68, subfunction 21 - load driver PE. ============
3364
=========== Function 68, subfunction 21 - load driver PE. ============
3767
======================================================================
3365
======================================================================
3768
Parameters:
3366
Parameters:
3769
  * eax = 68 - function number
3367
  * eax = 68 - function number
3770
  * ebx = 21 - subfunction number
3368
  * ebx = 21 - subfunction number
3771
  * ecx = pointer to ASCIIZ-string with driver name
3369
  * ecx = pointer to ASCIIZ-string with driver name
3772
  * edx = pointer to command line
3370
  * edx = pointer to command line
3773
Returned value:
3371
Returned value:
3774
  * eax = 0 - failed
3372
  * eax = 0 - failed
3775
  * otherwise eax = driver handle
3373
  * otherwise eax = driver handle
3776
Remarks:
3374
Remarks:
3777
  * If the driver was not loaded yet, it is loaded;
3375
  * If the driver was not loaded yet, it is loaded;
3778
    if the driver was loaded yet, nothing happens.
3376
    if the driver was loaded yet, nothing happens.
3779
 
3377
 
3780
======================================================================
3378
======================================================================
3781
======== Function 68, subfunction 22 - open named memory area. =======
3379
======== Function 68, subfunction 22 - open named memory area. =======
3782
======================================================================
3380
======================================================================
3783
Parameters:
3381
Parameters:
3784
  * eax = 68 - function number
3382
  * eax = 68 - function number
3785
  * ebx = 22 - subfunction number
3383
  * ebx = 22 - subfunction number
3786
  * ecx = area name. Maximum of 31 characters with terminating zero
3384
  * ecx = area name. Maximum of 31 characters with terminating zero
3787
  * edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
3385
  * edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
3788
  * esi = flags for open and access:
3386
  * esi = flags for open and access:
3789
    * SHM_OPEN        = 0x00 - open existing memory area. If an area
3387
    * SHM_OPEN        = 0x00 - open existing memory area. If an area
3790
                          with such name does not exist, the function
3388
                          with such name does not exist, the function
3791
                          will return error code 5.
3389
                          will return error code 5.
3792
    * SHM_OPEN_ALWAYS = 0x04 - open existing or create new
3390
    * SHM_OPEN_ALWAYS = 0x04 - open existing or create new
3793
                          memory area.
3391
                          memory area.
3794
    * SHM_CREATE      = 0x08 - create new memory area. If an area
3392
    * SHM_CREATE      = 0x08 - create new memory area. If an area
3795
                          with such name already exists, the function
3393
                          with such name already exists, the function
3796
                          will return error code 10.
3394
                          will return error code 10.
3797
    * SHM_READ        = 0x00 - only read access
3395
    * SHM_READ        = 0x00 - only read access
3798
    * SHM_WRITE       = 0x01 - read and write access
3396
    * SHM_WRITE       = 0x01 - read and write access
3799
Returned value:
3397
Returned value:
3800
  * eax = pointer to memory area, 0 if error has occured
3398
  * eax = pointer to memory area, 0 if error has occured
3801
  * if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS):
3399
  * if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS):
3802
    edx = 0 - success, otherwise - error code
3400
    edx = 0 - success, otherwise - error code
3803
  * if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS):
3401
  * if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS):
3804
    edx = error code (if eax=0) or area size in bytes
3402
    edx = error code (if eax=0) or area size in bytes
3805
Error codes:
3403
Error codes:
3806
  * E_NOTFOUND = 5
3404
  * E_NOTFOUND = 5
3807
  * E_ACCESS = 10
3405
  * E_ACCESS = 10
3808
  * E_NOMEM = 30
3406
  * E_NOMEM = 30
3809
  * E_PARAM = 33
3407
  * E_PARAM = 33
3810
Remarks:
3408
Remarks:
3811
  * Before this call one must initialize process heap by call to
3409
  * Before this call one must initialize process heap by call to
3812
    subfunction 11.
3410
    subfunction 11.
3813
  * If a new area is created, access flags set maximal rights
3411
  * If a new area is created, access flags set maximal rights
3814
    for other processes. An attempt from other process to open
3412
    for other processes. An attempt from other process to open
3815
    with denied rights will fail with error code E_ACCESS.
3413
    with denied rights will fail with error code E_ACCESS.
3816
  * The process which has created an area always has write access.
3414
  * The process which has created an area always has write access.
3817
 
3415
 
3818
======================================================================
3416
======================================================================
3819
======= Function 68, subfunction 23 - close named memory area. =======
3417
======= Function 68, subfunction 23 - close named memory area. =======
3820
======================================================================
3418
======================================================================
3821
Parameters:
3419
Parameters:
3822
  * eax = 68 - function number
3420
  * eax = 68 - function number
3823
  * ebx = 23 - subfunction number
3421
  * ebx = 23 - subfunction number
3824
  * ecx = area name. Maximum of 31 characters with terminating zero
3422
  * ecx = area name. Maximum of 31 characters with terminating zero
3825
Returned value:
3423
Returned value:
3826
  * eax destroyed
3424
  * eax destroyed
3827
Remarks:
3425
Remarks:
3828
  * A memory area is physically freed (with deleting all data and
3426
  * A memory area is physically freed (with deleting all data and
3829
    freeing physical memory), when all threads which have opened
3427
    freeing physical memory), when all threads which have opened
3830
    this area will close it.
3428
    this area will close it.
3831
  * When thread is terminating, all opened by it areas are closed.
3429
  * When thread is terminating, all opened by it areas are closed.
3832
 
3430
 
3833
======================================================================
3431
======================================================================
3834
======== Function 68, subfunction 24 - set exception handler. ========
3432
======== Function 68, subfunction 24 - set exception handler. ========
3835
======================================================================
3433
======================================================================
3836
Parameters:
3434
Parameters:
3837
  * eax = 68 - function number
3435
  * eax = 68 - function number
3838
  * ebx = 24 - subfunction number
3436
  * ebx = 24 - subfunction number
3839
  * ecx = address of the new exception handler
3437
  * ecx = address of the new exception handler
3840
  * edx = the mask of handled exceptions
3438
  * edx = the mask of handled exceptions
3841
Returned value:
3439
Returned value:
3842
  * eax = address of the old exception handler (0, if it was not set)
3440
  * eax = address of the old exception handler (0, if it was not set)
3843
  * ebx = the old mask of handled exceptions
3441
  * ebx = the old mask of handled exceptions
3844
Remarks:
3442
Remarks:
3845
  * Bit number in mask of exceptions corresponds to exception number
3443
  * Bit number in mask of exceptions corresponds to exception number
3846
    in CPU-specification (Intel-PC). For example, FPU exceptions have
3444
    in CPU-specification (Intel-PC). For example, FPU exceptions have
3847
    number 16 (#MF), and SSE exceptions - 19 (#XF).
3445
    number 16 (#MF), and SSE exceptions - 19 (#XF).
3848
  * The current implementation ignores the inquiry for hook of 7
3446
  * The current implementation ignores the inquiry for hook of 7
3849
    exception - the system handles #NM by its own.
3447
    exception - the system handles #NM by its own.
3850
  * The exception handler is called with exception number as first
3448
  * The exception handler is called with exception number as first
3851
    (and only) stack parameter. So, correct exit from the handler is
3449
    (and only) stack parameter. So, correct exit from the handler is
3852
    RET 4. It returns to the instruction, that caused the exception,
3450
    RET 4. It returns to the instruction, that caused the exception,
3853
    for faults, and to the next instruction for traps (see
3451
    for faults, and to the next instruction for traps (see
3854
    classification of exceptions in CPU specification).
3452
    classification of exceptions in CPU specification).
3855
  * When user handler receives control, the corresponding bit in
3453
  * When user handler receives control, the corresponding bit in
3856
    the exception mask is cleared. Raising this exception
3454
    the exception mask is cleared. Raising this exception
3857
    in consequence leads to default handling, that is,
3455
    in consequence leads to default handling, that is,
3858
    terminating the application in absence of debugger or
3456
    terminating the application in absence of debugger or
3859
    suspend with notification of debugger otherwise.
3457
    suspend with notification of debugger otherwise.
3860
  * After user handler completes critical operations, it can set
3458
  * After user handler completes critical operations, it can set
3861
    the corresponding bit in the exception mask with subfunction 25.
3459
    the corresponding bit in the exception mask with subfunction 25.
3862
    Also user handler is responsible for clearing exceptions flags in
3460
    Also user handler is responsible for clearing exceptions flags in
3863
    FPU and/or SSE.
3461
    FPU and/or SSE.
3864
 
3462
 
3865
======================================================================
3463
======================================================================
3866
====== Function 68, subfunction 25 - set FPU exception handler. ======
3464
====== Function 68, subfunction 25 - set FPU exception handler. ======
3867
======================================================================
3465
======================================================================
3868
Parameters:
3466
Parameters:
3869
  * eax = 68 - function number
3467
  * eax = 68 - function number
3870
  * ebx = 25 - subfunction number
3468
  * ebx = 25 - subfunction number
3871
  * ecx = signal number
3469
  * ecx = signal number
3872
  * edx = value of activity (0/1)
3470
  * edx = value of activity (0/1)
3873
Returned value:
3471
Returned value:
3874
  * eax = -1 - invalid signal number
3472
  * eax = -1 - invalid signal number
3875
  * otherwise eax = old value of activity for this signal (0/1)
3473
  * otherwise eax = old value of activity for this signal (0/1)
3876
Remarks:
3474
Remarks:
3877
  * In current implementation only mask for user excepton handler,
3475
  * In current implementation only mask for user excepton handler,
3878
    which has been previously set by subfunction 24,
3476
    which has been previously set by subfunction 24,
3879
    is changed. Signal number corresponds to exception number.
3477
    is changed. Signal number corresponds to exception number.
3880
 
3478
 
3881
======================================================================
3479
======================================================================
3882
====== Function 68, subfunction 26 - release memory pages ============
3480
====== Function 68, subfunction 26 - release memory pages ============
3883
======================================================================
3481
======================================================================
3884
Parameters:
3482
Parameters:
3885
  * eax = 68 - function number
3483
  * eax = 68 - function number
3886
  * ebx = 26 - subfunction number
3484
  * ebx = 26 - subfunction number
3887
  * ecx = pointer to the memory block, allocated by subfunction 12
3485
  * ecx = pointer to the memory block, allocated by subfunction 12
3888
  * edx = offset from the block beginnings
3486
  * edx = offset from the block beginnings
3889
  * esi = the size of the region of memory to release, in bytes
3487
  * esi = the size of the region of memory to release, in bytes
3890
Remarks:
3488
Remarks:
3891
  * function release range of pages from ecx+edx to ecx+edx+esi
3489
  * function release range of pages from ecx+edx to ecx+edx+esi
3892
    and set virtual memory into reserved state.
3490
    and set virtual memory into reserved state.
3893
 
3491
 
3894
======================================================================
3492
======================================================================
3895
========== Function 68, subfunction 27 - load file ===================
3493
========== Function 68, subfunction 27 - load file ===================
3896
======================================================================
3494
======================================================================
3897
Parameters:
3495
Parameters:
3898
  * eax = 68 - function number
3496
  * eax = 68 - function number
3899
  * ebx = 27 - subfunction number
3497
  * ebx = 27 - subfunction number
3900
  * ecx = pointer to ASCIIZ-string with the filename
3498
  * ecx = pointer to ASCIIZ-string with the filename
3901
Returned value:
3499
Returned value:
3902
  * eax = pointer to the loaded file, or zero
3500
  * eax = pointer to the loaded file, or zero
3903
  * edx = size of the loaded file, or zero
3501
  * edx = size of the loaded file, or zero
3904
Remarks:
3502
Remarks:
3905
  * function loads file and unpacks, if necessary
3503
  * function loads file and unpacks, if necessary
3906
 
3504
 
3907
======================================================================
3505
======================================================================
3908
====================== Function 69 - debugging. ======================
3506
====================== Function 69 - debugging. ======================
3909
======================================================================
3507
======================================================================
3910
A process can load other process as debugged by set of corresponding
3508
A process can load other process as debugged by set of corresponding
3911
bit by call to subfunction 7 of function 70.
3509
bit by call to subfunction 7 of function 70.
3912
A process can have only one debugger; one process can debug some
3510
A process can have only one debugger; one process can debug some
3913
others. The system notifies debugger on events occuring with
3511
others. The system notifies debugger on events occuring with
3914
debugged process. Messages are written to the buffer defined by
3512
debugged process. Messages are written to the buffer defined by
3915
subfunction 0.
3513
subfunction 0.
3916
Format of a message:
3514
Format of a message:
3917
  * +0: dword: message code
3515
  * +0: dword: message code
3918
  * +4: dword: PID of debugged process
3516
  * +4: dword: PID of debugged process
3919
  * +8: there can be additional data depending on message code
3517
  * +8: there can be additional data depending on message code
3920
Message codes:
3518
Message codes:
3921
  * 1 = exception
3519
  * 1 = exception
3922
    * in addition dword-number of the exception is given
3520
    * in addition dword-number of the exception is given
3923
    * process is suspended
3521
    * process is suspended
3924
  * 2 = process has terminated
3522
  * 2 = process has terminated
3925
    * comes at any termination: both through the system function -1,
3523
    * comes at any termination: both through the system function -1,
3926
      and at "murder" by any other process (including debugger itself)
3524
      and at "murder" by any other process (including debugger itself)
3927
  * 3 = debug exception int 1 = #DB
3525
  * 3 = debug exception int 1 = #DB
3928
    * in addition dword-image of the register DR6 is given:
3526
    * in addition dword-image of the register DR6 is given:
3929
      * bits 0-3: condition of the corresponding breakpoint (set by
3527
      * bits 0-3: condition of the corresponding breakpoint (set by
3930
        subfunction 9) is satisfied
3528
        subfunction 9) is satisfied
3931
      * bit 14: exception has occured because of the trace mode
3529
      * bit 14: exception has occured because of the trace mode
3932
        (flag TF is set TF)
3530
        (flag TF is set TF)
3933
    * process is suspended
3531
    * process is suspended
3934
When debugger terminates, all debugged processes are killed.
3532
When debugger terminates, all debugged processes are killed.
3935
If debugger does not want this, it must previously detach by
3533
If debugger does not want this, it must previously detach by
3936
subfunction 3.
3534
subfunction 3.
3937
 
3535
 
3938
All subfunctions are applicable only to processes/threads started
3536
All subfunctions are applicable only to processes/threads started
3939
from the current by function 70 with set debugging flag.
3537
from the current by function 70 with set debugging flag.
3940
Debugging of multithreaded programs is not supported yet.
3538
Debugging of multithreaded programs is not supported yet.
3941
The full list of subfunctions:
3539
The full list of subfunctions:
3942
  * subfunction 0 - define data area for debug messages
3540
  * subfunction 0 - define data area for debug messages
3943
  * subfunction 1 - get contents of registers of debugged thread
3541
  * subfunction 1 - get contents of registers of debugged thread
3944
  * subfunction 2 - set contents of registers of debugged thread
3542
  * subfunction 2 - set contents of registers of debugged thread
3945
  * subfunction 3 - detach from debugged process
3543
  * subfunction 3 - detach from debugged process
3946
  * subfunction 4 - suspend debugged thread
3544
  * subfunction 4 - suspend debugged thread
3947
  * subfunction 5 - resume debugged thread
3545
  * subfunction 5 - resume debugged thread
3948
  * subfunction 6 - read from the memory of debugged process
3546
  * subfunction 6 - read from the memory of debugged process
3949
  * subfunction 7 - write to the memory of debugged process
3547
  * subfunction 7 - write to the memory of debugged process
3950
  * subfunction 8 - terminate debugged thread
3548
  * subfunction 8 - terminate debugged thread
3951
  * subfunction 9 - set/clear hardware breakpoint
3549
  * subfunction 9 - set/clear hardware breakpoint
3952
 
3550
 
3953
======================================================================
3551
======================================================================
3954
= Function 69, subfunction 0 - define data area fror debug messages. =
3552
= Function 69, subfunction 0 - define data area fror debug messages. =
3955
======================================================================
3553
======================================================================
3956
Parameters:
3554
Parameters:
3957
  * eax = 69 - function number
3555
  * eax = 69 - function number
3958
  * ebx = 0 - subfunction number
3556
  * ebx = 0 - subfunction number
3959
  * ecx = pointer
3557
  * ecx = pointer
3960
Format of data area:
3558
Format of data area:
3961
  * +0: dword: N = buffer size (not including this header)
3559
  * +0: dword: N = buffer size (not including this header)
3962
  * +4: dword: occupied place
3560
  * +4: dword: occupied place
3963
  * +8: N*byte: buffer
3561
  * +8: N*byte: buffer
3964
Returned value:
3562
Returned value:
3965
  * function does not return value
3563
  * function does not return value
3966
Remarks:
3564
Remarks:
3967
  * If the size field is negative, the buffer is considered locked
3565
  * If the size field is negative, the buffer is considered locked
3968
    and at arrival of new message the system will wait.
3566
    and at arrival of new message the system will wait.
3969
    For synchronization frame all work with the buffer by operations
3567
    For synchronization frame all work with the buffer by operations
3970
    lock/unlock
3568
    lock/unlock
3971
    	neg	[bufsize]
3569
    	neg	[bufsize]
3972
  * Data in the buffer are considered as array of items with variable
3570
  * Data in the buffer are considered as array of items with variable
3973
    length - messages. Format of a message is explained in
3571
    length - messages. Format of a message is explained in
3974
    general description.
3572
    general description.
3975
 
3573
 
3976
======================================================================
3574
======================================================================
3977
===================== Function 69, subfunction 1 =====================
3575
===================== Function 69, subfunction 1 =====================
3978
============ Get contents of registers of debugged thread. ===========
3576
============ Get contents of registers of debugged thread. ===========
3979
======================================================================
3577
======================================================================
3980
Parameters:
3578
Parameters:
3981
  * eax = 69 - function number
3579
  * eax = 69 - function number
3982
  * ebx = 1 - subfunction number
3580
  * ebx = 1 - subfunction number
3983
  * ecx = thread identifier
3581
  * ecx = thread identifier
3984
  * edx = size of context structure, must be 0x28=40 bytes
3582
  * edx = size of context structure, must be 0x28=40 bytes
3985
  * esi = pointer to context structure
3583
  * esi = pointer to context structure
3986
Returned value:
3584
Returned value:
3987
  * function does not return value
3585
  * function does not return value
3988
Format of context structure: (FPU is not supported yet)
3586
Format of context structure: (FPU is not supported yet)
3989
  * +0: dword: eip
3587
  * +0: dword: eip
3990
  * +4: dword: eflags
3588
  * +4: dword: eflags
3991
  * +8: dword: eax
3589
  * +8: dword: eax
3992
  * +12 = +0xC: dword: ecx
3590
  * +12 = +0xC: dword: ecx
3993
  * +16 = +0x10: dword: edx
3591
  * +16 = +0x10: dword: edx
3994
  * +20 = +0x14: dword: ebx
3592
  * +20 = +0x14: dword: ebx
3995
  * +24 = +0x18: dword: esp
3593
  * +24 = +0x18: dword: esp
3996
  * +28 = +0x1C: dword: ebp
3594
  * +28 = +0x1C: dword: ebp
3997
  * +32 = +0x20: dword: esi
3595
  * +32 = +0x20: dword: esi
3998
  * +36 = +0x24: dword: edi
3596
  * +36 = +0x24: dword: edi
3999
Remarks:
3597
Remarks:
4000
  * If the thread executes code of ring-0, the function returns
3598
  * If the thread executes code of ring-0, the function returns
4001
    contents of registers of ring-3.
3599
    contents of registers of ring-3.
4002
  * Process must be loaded for debugging (as is shown in
3600
  * Process must be loaded for debugging (as is shown in
4003
    general description).
3601
    general description).
4004
 
3602
 
4005
======================================================================
3603
======================================================================
4006
===================== Function 69, subfunction 2 =====================
3604
===================== Function 69, subfunction 2 =====================
4007
============ Set contents of registers of debugged thread. ===========
3605
============ Set contents of registers of debugged thread. ===========
4008
======================================================================
3606
======================================================================
4009
Parameters:
3607
Parameters:
4010
  * eax = 69 - function number
3608
  * eax = 69 - function number
4011
  * ebx = 2 - subfunction number
3609
  * ebx = 2 - subfunction number
4012
  * ecx = thread identifier
3610
  * ecx = thread identifier
4013
  * edx = size of context structure, must be 0x28=40 bytes
3611
  * edx = size of context structure, must be 0x28=40 bytes
4014
Returned value:
3612
Returned value:
4015
  * function does not return value
3613
  * function does not return value
4016
Format of context structure is shown in the description of
3614
Format of context structure is shown in the description of
4017
subfunction 1.
3615
subfunction 1.
4018
Remarks:
3616
Remarks:
4019
  * If the thread executes code of ring-0, the function returns
3617
  * If the thread executes code of ring-0, the function returns
4020
    contents of registers of ring-3.
3618
    contents of registers of ring-3.
4021
  * Process must be loaded for debugging (as is shown in
3619
  * Process must be loaded for debugging (as is shown in
4022
    general description).
3620
    general description).
4023
 
3621
 
4024
======================================================================
3622
======================================================================
4025
===== Function 69, subfunction 3 - detach from debugged process. =====
3623
===== Function 69, subfunction 3 - detach from debugged process. =====
4026
======================================================================
3624
======================================================================
4027
Parameters:
3625
Parameters:
4028
  * eax = 69 - function number
3626
  * eax = 69 - function number
4029
  * ebx = 3 - subfunction number
3627
  * ebx = 3 - subfunction number
4030
  * ecx = identifier
3628
  * ecx = identifier
4031
Returned value:
3629
Returned value:
4032
  * function does not return value
3630
  * function does not return value
4033
Remarks:
3631
Remarks:
4034
  * If the process was suspended, it resumes execution.
3632
  * If the process was suspended, it resumes execution.
4035
 
3633
 
4036
======================================================================
3634
======================================================================
4037
======== Function 69, subfunction 4 - suspend debugged thread. =======
3635
======== Function 69, subfunction 4 - suspend debugged thread. =======
4038
======================================================================
3636
======================================================================
4039
Parameters:
3637
Parameters:
4040
  * eax = 69 - function number
3638
  * eax = 69 - function number
4041
  * ebx = 4 - subfunction number
3639
  * ebx = 4 - subfunction number
4042
  * ecx = thread identifier
3640
  * ecx = thread identifier
4043
Returned value:
3641
Returned value:
4044
  * function does not return value
3642
  * function does not return value
4045
Remarks:
3643
Remarks:
4046
  * Process must be loaded for debugging (as is shown in
3644
  * Process must be loaded for debugging (as is shown in
4047
    general description).
3645
    general description).
4048
 
3646
 
4049
======================================================================
3647
======================================================================
4050
======== Function 69, subfunction 5 - resume debugged thread. ========
3648
======== Function 69, subfunction 5 - resume debugged thread. ========
4051
======================================================================
3649
======================================================================
4052
Parameters:
3650
Parameters:
4053
  * eax = 69 - function number
3651
  * eax = 69 - function number
4054
  * ebx = 5 - subfunction number
3652
  * ebx = 5 - subfunction number
4055
  * ecx = thread identifier
3653
  * ecx = thread identifier
4056
Returned value:
3654
Returned value:
4057
  * function does not return value
3655
  * function does not return value
4058
Remarks:
3656
Remarks:
4059
  * Process must be loaded for debugging (as is shown in
3657
  * Process must be loaded for debugging (as is shown in
4060
    general description).
3658
    general description).
4061
 
3659
 
4062
======================================================================
3660
======================================================================
4063
= Fucntion 69, subfunction 6 - read from memory of debugged process. =
3661
= Fucntion 69, subfunction 6 - read from memory of debugged process. =
4064
======================================================================
3662
======================================================================
4065
Parameters:
3663
Parameters:
4066
  * eax = 69 - function number
3664
  * eax = 69 - function number
4067
  * ebx = 6 - subfunction number
3665
  * ebx = 6 - subfunction number
4068
  * ecx = identifier
3666
  * ecx = identifier
4069
  * edx = number of bytes to read
3667
  * edx = number of bytes to read
4070
  * esi = address in the memory of debugged process
3668
  * esi = address in the memory of debugged process
4071
  * edi = pointer to buffer for data
3669
  * edi = pointer to buffer for data
4072
Returned value:
3670
Returned value:
4073
  * eax = -1 at an error (invalid PID or buffer)
3671
  * eax = -1 at an error (invalid PID or buffer)
4074
  * otherwise eax = number of read bytes (possibly, 0,
3672
  * otherwise eax = number of read bytes (possibly, 0,
4075
    if esi is too large)
3673
    if esi is too large)
4076
Remarks:
3674
Remarks:
4077
  * Process must be loaded for debugging (as is shown in
3675
  * Process must be loaded for debugging (as is shown in
4078
    general description).
3676
    general description).
4079
 
3677
 
4080
======================================================================
3678
======================================================================
4081
== Function 69, subfunction 7 - write to memory of debugged process. =
3679
== Function 69, subfunction 7 - write to memory of debugged process. =
4082
======================================================================
3680
======================================================================
4083
Parameters:
3681
Parameters:
4084
  * eax = 69 - function number
3682
  * eax = 69 - function number
4085
  * ebx = 7 - subfunction number
3683
  * ebx = 7 - subfunction number
4086
  * ecx = identifier
3684
  * ecx = identifier
4087
  * edx = number of bytes to write
3685
  * edx = number of bytes to write
4088
  * esi = address of memory in debugged process
3686
  * esi = address of memory in debugged process
4089
  * edi = pointer to data
3687
  * edi = pointer to data
4090
Returned value:
3688
Returned value:
4091
  * eax = -1 at an error (invalid PID or buffer)
3689
  * eax = -1 at an error (invalid PID or buffer)
4092
  * otherwise eax = number of written bytes (possibly, 0,
3690
  * otherwise eax = number of written bytes (possibly, 0,
4093
    if esi is too large)
3691
    if esi is too large)
4094
Remarks:
3692
Remarks:
4095
  * Process must be loaded for debugging (as is shown in
3693
  * Process must be loaded for debugging (as is shown in
4096
    general description).
3694
    general description).
4097
 
3695
 
4098
======================================================================
3696
======================================================================
4099
======= Function 69, subfunction 8 - terminate debugged thread. ======
3697
======= Function 69, subfunction 8 - terminate debugged thread. ======
4100
======================================================================
3698
======================================================================
4101
Parameters:
3699
Parameters:
4102
  * eax = 69 - function number
3700
  * eax = 69 - function number
4103
  * ebx = 8 - subfunction number
3701
  * ebx = 8 - subfunction number
4104
  * ecx = identifier
3702
  * ecx = identifier
4105
Returned value:
3703
Returned value:
4106
  * function does not return value
3704
  * function does not return value
4107
Remarks:
3705
Remarks:
4108
  * Process must be loaded for debugging (as is shown in
3706
  * Process must be loaded for debugging (as is shown in
4109
    general description).
3707
    general description).
4110
  * The function is similar to subfunction 2 of function 18
3708
  * The function is similar to subfunction 2 of function 18
4111
    with two differences: it requires first remark and
3709
    with two differences: it requires first remark and
4112
    accepts PID rather than slot number.
3710
    accepts PID rather than slot number.
4113
 
3711
 
4114
======================================================================
3712
======================================================================
4115
===== Function 69, subfunction 9 - set/clear hardware breakpoint. ====
3713
===== Function 69, subfunction 9 - set/clear hardware breakpoint. ====
4116
======================================================================
3714
======================================================================
4117
Parameters:
3715
Parameters:
4118
  * eax = 69 - function number
3716
  * eax = 69 - function number
4119
  * ebx = 9 - subfunction number
3717
  * ebx = 9 - subfunction number
4120
  * ecx = thread identifier
3718
  * ecx = thread identifier
4121
  * dl = index of breakpoint, from 0 to 3 inclusively
3719
  * dl = index of breakpoint, from 0 to 3 inclusively
4122
  * dh = flags:
3720
  * dh = flags:
4123
    * if high bit is cleared - set breakpoint:
3721
    * if high bit is cleared - set breakpoint:
4124
      * bits 0-1 - condition:
3722
      * bits 0-1 - condition:
4125
        * 00 = breakpoint on execution
3723
        * 00 = breakpoint on execution
4126
        * 01 = breakpoint on read
3724
        * 01 = breakpoint on read
4127
        * 11 = breakpoint on read/write
3725
        * 11 = breakpoint on read/write
4128
      * bits 2-3 - length; for breakpoints on exception it must be
3726
      * bits 2-3 - length; for breakpoints on exception it must be
4129
        00, otherwise one of
3727
        00, otherwise one of
4130
        * 00 = byte
3728
        * 00 = byte
4131
        * 01 = word
3729
        * 01 = word
4132
        * 11 = dword
3730
        * 11 = dword
4133
      * esi = breakpoint address; must be aligned according to
3731
      * esi = breakpoint address; must be aligned according to
4134
        the length (i.e. must be even for word breakpoints,
3732
        the length (i.e. must be even for word breakpoints,
4135
        divisible by 4 for dword)
3733
        divisible by 4 for dword)
4136
    * if high bit is set - clear breakpoint
3734
    * if high bit is set - clear breakpoint
4137
Returned value:
3735
Returned value:
4138
  * eax = 0 - success
3736
  * eax = 0 - success
4139
  * eax = 1 - error in the input data
3737
  * eax = 1 - error in the input data
4140
  * eax = 2 - (reserved, is never returned in the current
3738
  * eax = 2 - (reserved, is never returned in the current
4141
    implementation) a global breakpoint with that index is already set
3739
    implementation) a global breakpoint with that index is already set
4142
Remarks:
3740
Remarks:
4143
  * Process must be loaded for debugging (as is shown in
3741
  * Process must be loaded for debugging (as is shown in
4144
    general description).
3742
    general description).
4145
  * Hardware breakpoints are implemented through DRx-registers of
3743
  * Hardware breakpoints are implemented through DRx-registers of
4146
    the processor, all limitations results from this.
3744
    the processor, all limitations results from this.
4147
  * The function can reinstall the breakpoint, previously set
3745
  * The function can reinstall the breakpoint, previously set
4148
    by it (and it does not inform on this).
3746
    by it (and it does not inform on this).
4149
    Carry on the list of set breakpoints in the debugger.
3747
    Carry on the list of set breakpoints in the debugger.
4150
  * Breakpoints generate debug exception #DB, on which the system
3748
  * Breakpoints generate debug exception #DB, on which the system
4151
    notifies debugger.
3749
    notifies debugger.
4152
  * Breakpoints on write and read/write act after
3750
  * Breakpoints on write and read/write act after
4153
    execution of the caused it instruction.
3751
    execution of the caused it instruction.
4154
 
3752
 
4155
======================================================================
3753
======================================================================
4156
==== Function 70 - work with file system with long names support. ====
3754
==== Function 70 - work with file system with long names support. ====
4157
======================================================================
3755
======================================================================
4158
Parameters:
3756
Parameters:
4159
  * eax = 70
3757
  * eax = 70
4160
  * ebx = pointer to the information structure
3758
  * ebx = pointer to the information structure
4161
Returned value:
3759
Returned value:
4162
  * eax = 0 - success; otherwise file system error code
3760
  * eax = 0 - success; otherwise file system error code
4163
  * some subfunctions return value in other registers too
3761
  * some subfunctions return value in other registers too
4164
General format of the information structure:
3762
General format of the information structure:
4165
  * +0: dword: subfunction number
3763
  * +0: dword: subfunction number
4166
  * +4: dword: file offset
3764
  * +4: dword: file offset
4167
  * +8: dword: high dword of offset (must be 0) or flags field
3765
  * +8: dword: high dword of offset (must be 0) or flags field
4168
  * +12 = +0xC: dword: size
3766
  * +12 = +0xC: dword: size
4169
  * +16 = +0x10: dword: pointer to data
3767
  * +16 = +0x10: dword: pointer to data
4170
  * +20 = +0x14: n db: ASCIIZ-string with the filename
3768
  * +20 = +0x14: n db: ASCIIZ-string with the filename
4171
    or
3769
    or
4172
  * +20 = +0x14: db 0
3770
  * +20 = +0x14: db 0
4173
  * +21 = +0x15: dd pointer to ASCIIZ-string with the filename
3771
  * +21 = +0x15: dd pointer to ASCIIZ-string with the filename
4174
Specifications - in documentation on the appropriate subfunction.
3772
Specifications - in documentation on the appropriate subfunction.
4175
Filename is case-insensitive. Russian letters must be written in
3773
Filename is case-insensitive. Russian letters must be written in
4176
the encoding cp866 (DOS).
3774
the encoding cp866 (DOS).
4177
Format of filename:
3775
Format of filename:
4178
/base/number/dir1/dir2/.../dirn/file,
3776
/base/number/dir1/dir2/.../dirn/file,
4179
where /base/number identifies device, on which file is located:
3777
where /base/number identifies device, on which file is located:
4180
one of
3778
one of
4181
  * /RD/1 = /RAMDISK/1 to access ramdisk
3779
  * /RD/1 = /RAMDISK/1 to access ramdisk
4182
  * /FD/1 = /FLOPPYDISK/1 to access first floppy drive,
3780
  * /FD/1 = /FLOPPYDISK/1 to access first floppy drive,
4183
    /FD/2 = /FLOPPYDISK/2 to access second one
3781
    /FD/2 = /FLOPPYDISK/2 to access second one
4184
  * /HD0/x, /HD1/x, /HD2/x, /HD3/x to access accordingly to devices
3782
  * /HD0/x, /HD1/x, /HD2/x, /HD3/x to access accordingly to devices
4185
    IDE0 (Primary Master), IDE1 (Primary Slave),
3783
    IDE0 (Primary Master), IDE1 (Primary Slave),
4186
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
3784
    IDE2 (Secondary Master), IDE3 (Secondary Slave);
4187
    x - partition number on the selected hard drive, varies from 1
3785
    x - partition number on the selected hard drive, varies from 1
4188
    to 255 (on each hard drive the indexing starts from 1)
3786
    to 255 (on each hard drive the indexing starts from 1)
4189
  * /CD0/1, /CD1/1, /CD2/1, /CD3/1 to access accordingly to
3787
  * /CD0/1, /CD1/1, /CD2/1, /CD3/1 to access accordingly to
4190
    CD on IDE0 (Primary Master), IDE1 (Primary Slave),
3788
    CD on IDE0 (Primary Master), IDE1 (Primary Slave),
4191
    IDE2 (Secondary Master), IDE3 (Secondary Slave)
3789
    IDE2 (Secondary Master), IDE3 (Secondary Slave)
4192
  * /SYS means system folder; with the usual boot (from floppy)
3790
  * /SYS means system folder; with the usual boot (from floppy)
4193
    is equivalent to /RD/1
3791
    is equivalent to /RD/1
4194
Examples:
3792
Examples:
4195
  * '/rd/1/kernel.asm',0
3793
  * '/rd/1/kernel.asm',0
4196
  * '/HD0/1/kernel.asm',0
3794
  * '/HD0/1/kernel.asm',0
4197
  * '/hd0/2/menuet/pics/tanzania.bmp',0
3795
  * '/hd0/2/menuet/pics/tanzania.bmp',0
4198
  * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
3796
  * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
4199
  * '/sys/MySuperApp.ini',0
3797
  * '/sys/MySuperApp.ini',0
4200
Also function supports relative names.  If the path begins not
3798
Also function supports relative names.  If the path begins not
4201
with '/', it is considered relative to a current folder. To get or
3799
with '/', it is considered relative to a current folder. To get or
4202
set a current folder, use the function 30.
3800
set a current folder, use the function 30.
4203
 
3801
 
4204
Available subfunctions:
3802
Available subfunctions:
4205
  * subfunction 0 - read file
3803
  * subfunction 0 - read file
4206
  * subfunction 1 - read folder
3804
  * subfunction 1 - read folder
4207
  * subfunction 2 - create/rewrite file
3805
  * subfunction 2 - create/rewrite file
4208
  * subfunction 3 - write to existing file
3806
  * subfunction 3 - write to existing file
4209
  * subfunction 4 - set file size
3807
  * subfunction 4 - set file size
4210
  * subfunction 5 - get attributes of file/folder
3808
  * subfunction 5 - get attributes of file/folder
4211
  * subfunction 6 - set attributes of file/folder
3809
  * subfunction 6 - set attributes of file/folder
4212
  * subfunction 7 - start application
3810
  * subfunction 7 - start application
4213
  * subfunction 8 - delete file/folder
3811
  * subfunction 8 - delete file/folder
4214
  * subfunction 9 - create folder
3812
  * subfunction 9 - create folder
4215
For CD-drives due to hardware limitations only subfunctions
3813
For CD-drives due to hardware limitations only subfunctions
4216
0,1,5 and 7 are available, other subfunctions return error
3814
0,1,5 and 7 are available, other subfunctions return error
4217
with code 2.
3815
with code 2.
4218
At the first call of subfunctions 0,1,5,7 to ATAPI devices
3816
At the first call of subfunctions 0,1,5,7 to ATAPI devices
4219
(CD and DVD) the manual control of tray is locked due to caching
3817
(CD and DVD) the manual control of tray is locked due to caching
4220
drive data. Unlocking is made when subfunction 4 of function 24
3818
drive data. Unlocking is made when subfunction 4 of function 24
4221
is called for corresponding device.
3819
is called for corresponding device.
4222
 
3820
 
4223
======================================================================
3821
======================================================================
4224
=== Function 70, subfunction 0 - read file with long names support. ==
3822
=== Function 70, subfunction 0 - read file with long names support. ==
4225
======================================================================
3823
======================================================================
4226
Parameters:
3824
Parameters:
4227
  * eax = 70 - function number
3825
  * eax = 70 - function number
4228
  * ebx = pointer to the information structure
3826
  * ebx = pointer to the information structure
4229
Format of the information structure:
3827
Format of the information structure:
4230
  * +0: dword: 0 = subfunction number
3828
  * +0: dword: 0 = subfunction number
4231
  * +4: dword: file offset (in bytes)
3829
  * +4: dword: file offset (in bytes)
4232
  * +8: dword: 0 (reserved for high dword of offset)
3830
  * +8: dword: 0 (reserved for high dword of offset)
4233
  * +12 = +0xC: dword: number of bytes to read
3831
  * +12 = +0xC: dword: number of bytes to read
4234
  * +16 = +0x10: dword: pointer to buffer for data
3832
  * +16 = +0x10: dword: pointer to buffer for data
4235
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3833
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4236
    given in the general description
3834
    given in the general description
4237
    or
3835
    or
4238
  * +20 = +0x14: db 0
3836
  * +20 = +0x14: db 0
4239
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3837
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4240
Returned value:
3838
Returned value:
4241
  * eax = 0 - success, otherwise file system error code
3839
  * eax = 0 - success, otherwise file system error code
4242
  * ebx = number of read bytes or -1=0xffffffff if file was not found
3840
  * ebx = number of read bytes or -1=0xffffffff if file was not found
4243
Remarks:
3841
Remarks:
4244
  * If file was ended before last requested block was read,
3842
  * If file was ended before last requested block was read,
4245
    the function will read as many as it can, and after that return
3843
    the function will read as many as it can, and after that return
4246
    eax=6 (EOF).
3844
    eax=6 (EOF).
4247
  * The function does not allow to read folder (returns eax=10,
3845
  * The function does not allow to read folder (returns eax=10,
4248
    access denied).
3846
    access denied).
4249
 
3847
 
4250
======================================================================
3848
======================================================================
4251
== Function 70, subfunction 1 - read folder with long names support. =
3849
== Function 70, subfunction 1 - read folder with long names support. =
4252
======================================================================
3850
======================================================================
4253
Parameters:
3851
Parameters:
4254
  * eax = 70 - function number
3852
  * eax = 70 - function number
4255
  * ebx = pointer to the information structure
3853
  * ebx = pointer to the information structure
4256
Format of the information structure:
3854
Format of the information structure:
4257
  * +0: dword: 1 = subfunction number
3855
  * +0: dword: 1 = subfunction number
4258
  * +4: dword: index of starting block (beginning from 0)
3856
  * +4: dword: index of starting block (beginning from 0)
4259
  * +8: dword: flags field:
3857
  * +8: dword: flags field:
4260
    * bit 0 (mask 1): in what format to return names,
3858
    * bit 0 (mask 1): in what format to return names,
4261
      0=ANSI, 1=UNICODE
3859
      0=ANSI, 1=UNICODE
4262
    * other bits are reserved and must be set to 0 for the future
3860
    * other bits are reserved and must be set to 0 for the future
4263
      compatibility
3861
      compatibility
4264
  * +12 = +0xC: dword: number of blocks to read
3862
  * +12 = +0xC: dword: number of blocks to read
4265
  * +16 = +0x10: dword: pointer to buffer for data, buffer size
3863
  * +16 = +0x10: dword: pointer to buffer for data, buffer size
4266
    must be not less than 32 + [+12]*560 bytes
3864
    must be not less than 32 + [+12]*560 bytes
4267
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
3865
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
4268
    given in the general description
3866
    given in the general description
4269
    or
3867
    or
4270
  * +20 = +0x14: db 0
3868
  * +20 = +0x14: db 0
4271
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3869
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4272
Returned value:
3870
Returned value:
4273
  * eax = 0 - success, otherwise file system error code
3871
  * eax = 0 - success, otherwise file system error code
4274
  * ebx = number of files, information on which was written to
3872
  * ebx = number of files, information on which was written to
4275
    the buffer, or -1=0xffffffff, if folder was not found
3873
    the buffer, or -1=0xffffffff, if folder was not found
4276
Structure of the buffer:
3874
Structure of the buffer:
4277
  * +0: 32*byte: header
3875
  * +0: 32*byte: header
4278
  * +32 = +0x20: n1*byte: block with information on file 1
3876
  * +32 = +0x20: n1*byte: block with information on file 1
4279
  * +32+n1: n2*byte: block with information on file 2
3877
  * +32+n1: n2*byte: block with information on file 2
4280
  * ...
3878
  * ...
4281
Structure of header:
3879
Structure of header:
4282
  * +0: dword: version of structure (current is 1)
3880
  * +0: dword: version of structure (current is 1)
4283
  * +4: dword: number of placed blocks; is not greater than requested
3881
  * +4: dword: number of placed blocks; is not greater than requested
4284
    in the field +12 of information structure; can be less, if
3882
    in the field +12 of information structure; can be less, if
4285
    there are no more files in folder (the same as in ebx)
3883
    there are no more files in folder (the same as in ebx)
4286
  * +8: dword: total number of files in folder
3884
  * +8: dword: total number of files in folder
4287
  * +12 = +0xC: 20*byte: reserved (zeroed)
3885
  * +12 = +0xC: 20*byte: reserved (zeroed)
4288
Structure of block of data for folder entry (BDFE):
3886
Structure of block of data for folder entry (BDFE):
4289
  * +0: dword: attributes of file:
3887
  * +0: dword: attributes of file:
4290
    * bit 0 (mask 1): file is read-only
3888
    * bit 0 (mask 1): file is read-only
4291
    * bit 1 (mask 2): file is hidden
3889
    * bit 1 (mask 2): file is hidden
4292
    * bit 2 (mask 4): file is system
3890
    * bit 2 (mask 4): file is system
4293
    * bit 3 (mask 8): this is not a file but volume label
3891
    * bit 3 (mask 8): this is not a file but volume label
4294
      (for one partition meets no more than once and
3892
      (for one partition meets no more than once and
4295
      only in root folder)
3893
      only in root folder)
4296
    * bit 4 (mask 0x10): this is a folder
3894
    * bit 4 (mask 0x10): this is a folder
4297
    * bit 5 (mask 0x20): file was not archived - many archivation
3895
    * bit 5 (mask 0x20): file was not archived - many archivation
4298
      programs have an option to archive only files with this bit set,
3896
      programs have an option to archive only files with this bit set,
4299
      and after archiving this bit is cleared - it can be useful
3897
      and after archiving this bit is cleared - it can be useful
4300
      for automatically creating of backup-archives as at writing
3898
      for automatically creating of backup-archives as at writing
4301
      this bit is usually set
3899
      this bit is usually set
4302
  * +4: byte: type of name data:
3900
  * +4: byte: type of name data:
4303
    (coincides with bit 0 of flags in the information structure)
3901
    (coincides with bit 0 of flags in the information structure)
4304
    * 0 = ASCII = 1-byte representation of each character
3902
    * 0 = ASCII = 1-byte representation of each character
4305
    * 1 = UNICODE = 2-byte representation of each character
3903
    * 1 = UNICODE = 2-byte representation of each character
4306
  * +5: 3*byte: reserved (zero)
3904
  * +5: 3*byte: reserved (zero)
4307
  * +8: 4*byte: time of file creation
3905
  * +8: 4*byte: time of file creation
4308
  * +12 = +0xC: 4*byte: date of file creation
3906
  * +12 = +0xC: 4*byte: date of file creation
4309
  * +16 = +0x10: 4*byte: time of last access (read or write)
3907
  * +16 = +0x10: 4*byte: time of last access (read or write)
4310
  * +20 = +0x14: 4*byte: date of last access
3908
  * +20 = +0x14: 4*byte: date of last access
4311
  * +24 = +0x18: 4*byte: time of last modification
3909
  * +24 = +0x18: 4*byte: time of last modification
4312
  * +28 = +0x1C: 4*byte: date of last modification
3910
  * +28 = +0x1C: 4*byte: date of last modification
4313
  * +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
3911
  * +32 = +0x20: qword: file size in bytes (up to 16777216 Tb)
4314
  * +40 = +0x28: name
3912
  * +40 = +0x28: name
4315
    * for ASCII format: maximum length is 263 characters
3913
    * for ASCII format: maximum length is 263 characters
4316
      (263 bytes), byte after the name has value 0
3914
      (263 bytes), byte after the name has value 0
4317
    * for UNICODE format: maximum length is 259 characters
3915
    * for UNICODE format: maximum length is 259 characters
4318
      (518 bytes), 2 bytes after the name have value 0
3916
      (518 bytes), 2 bytes after the name have value 0
4319
Time format:
3917
Time format:
4320
  * +0: byte: seconds
3918
  * +0: byte: seconds
4321
  * +1: byte: minutes
3919
  * +1: byte: minutes
4322
  * +2: byte: hours
3920
  * +2: byte: hours
4323
  * +3: byte: reserved (0)
3921
  * +3: byte: reserved (0)
4324
  * for example, 23.59.59 is written as (in hex) 3B 3B 17 00
3922
  * for example, 23.59.59 is written as (in hex) 3B 3B 17 00
4325
Date format:
3923
Date format:
4326
  * +0: byte: day
3924
  * +0: byte: day
4327
  * +1: byte: month
3925
  * +1: byte: month
4328
  * +2: word: year
3926
  * +2: word: year
4329
  * for example, 25.11.1979 is written as (in hex) 19 0B BB 07
3927
  * for example, 25.11.1979 is written as (in hex) 19 0B BB 07
4330
Remarks:
3928
Remarks:
4331
  * If BDFE contains ASCII name, the length of BDFE is 304 bytes,
3929
  * If BDFE contains ASCII name, the length of BDFE is 304 bytes,
4332
    if UNICODE name - 560 bytes. Value of length is aligned
3930
    if UNICODE name - 560 bytes. Value of length is aligned
4333
    on 16-byte bound (to accelerate processing in CPU cache).
3931
    on 16-byte bound (to accelerate processing in CPU cache).
4334
  * First character after a name is zero (ASCIIZ-string). The further
3932
  * First character after a name is zero (ASCIIZ-string). The further
4335
    data contain garbage.
3933
    data contain garbage.
4336
  * If files in folder were ended before requested number was read,
3934
  * If files in folder were ended before requested number was read,
4337
    the function will read as many as it can, and after that return
3935
    the function will read as many as it can, and after that return
4338
    eax=6 (EOF).
3936
    eax=6 (EOF).
4339
  * Any folder on the disk, except for root, contains two special
3937
  * Any folder on the disk, except for root, contains two special
4340
    entries "." and "..", identifying accordingly the folder itself
3938
    entries "." and "..", identifying accordingly the folder itself
4341
    and the parent folder.
3939
    and the parent folder.
4342
  * The function allows also to read virtual folders "/", "/rd",
3940
  * The function allows also to read virtual folders "/", "/rd",
4343
    "/fd", "/hd[n]", thus attributes of subfolders are set to 0x10,
3941
    "/fd", "/hd[n]", thus attributes of subfolders are set to 0x10,
4344
    and times and dates are zeroed. An alternative way to get the
3942
    and times and dates are zeroed. An alternative way to get the
4345
    equipment information - subfunction 11 of function 18.
3943
    equipment information - subfunction 11 of function 18.
4346
 
3944
 
4347
======================================================================
3945
======================================================================
4348
===================== Function 70, subfunction 2 =====================
3946
===================== Function 70, subfunction 2 =====================
4349
============ Create/rewrite file with long names support. ============
3947
============ Create/rewrite file with long names support. ============
4350
======================================================================
3948
======================================================================
4351
Parameters:
3949
Parameters:
4352
  * eax = 70 - function number
3950
  * eax = 70 - function number
4353
  * ebx = pointer to the information structure
3951
  * ebx = pointer to the information structure
4354
Format of the information structure:
3952
Format of the information structure:
4355
  * +0: dword: 2 = subfunction number
3953
  * +0: dword: 2 = subfunction number
4356
  * +4: dword: 0 (reserved)
3954
  * +4: dword: 0 (reserved)
4357
  * +8: dword: 0 (reserved)
3955
  * +8: dword: 0 (reserved)
4358
  * +12 = +0xC: dword: number of bytes to read
3956
  * +12 = +0xC: dword: number of bytes to read
4359
  * +16 = +0x10: dword: pointer to data
3957
  * +16 = +0x10: dword: pointer to data
4360
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3958
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4361
    given in the general description
3959
    given in the general description
4362
    or
3960
    or
4363
  * +20 = +0x14: db 0
3961
  * +20 = +0x14: db 0
4364
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3962
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4365
Returned value:
3963
Returned value:
4366
  * eax = 0 - success, otherwise file system error code
3964
  * eax = 0 - success, otherwise file system error code
4367
  * ebx = number of written bytes (possibly 0)
3965
  * ebx = number of written bytes (possibly 0)
4368
Remarks:
3966
Remarks:
4369
  * If a file with given name did not exist, it is created;
3967
  * If a file with given name did not exist, it is created;
4370
    if it existed, it is rewritten.
3968
    if it existed, it is rewritten.
4371
  * If there is not enough free space on disk, the function will
3969
  * If there is not enough free space on disk, the function will
4372
    write as many as can and then return error code 8.
3970
    write as many as can and then return error code 8.
4373
  * The function is not supported for CD (returns error code 2).
3971
  * The function is not supported for CD (returns error code 2).
4374
 
3972
 
4375
======================================================================
3973
======================================================================
4376
===================== Function 70, subfunction 3 =====================
3974
===================== Function 70, subfunction 3 =====================
4377
=========== Write to existing file with long names support. ==========
3975
=========== Write to existing file with long names support. ==========
4378
======================================================================
3976
======================================================================
4379
Parameters:
3977
Parameters:
4380
  * eax = 70 - function number
3978
  * eax = 70 - function number
4381
  * ebx = pointer to the information structure
3979
  * ebx = pointer to the information structure
4382
Format of the information structure:
3980
Format of the information structure:
4383
  * +0: dword: 3 = subfunction number
3981
  * +0: dword: 3 = subfunction number
4384
  * +4: dword: file offset (in bytes)
3982
  * +4: dword: file offset (in bytes)
4385
  * +8: dword: high dword of offset (must be 0 for FAT)
3983
  * +8: dword: high dword of offset (must be 0 for FAT)
4386
  * +12 = +0xC: dword: number of bytes to write
3984
  * +12 = +0xC: dword: number of bytes to write
4387
  * +16 = +0x10: dword: pointer to data
3985
  * +16 = +0x10: dword: pointer to data
4388
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
3986
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4389
    given in the general description
3987
    given in the general description
4390
    or
3988
    or
4391
  * +20 = +0x14: db 0
3989
  * +20 = +0x14: db 0
4392
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
3990
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4393
Returned value:
3991
Returned value:
4394
  * eax = 0 - success, otherwise file system error code
3992
  * eax = 0 - success, otherwise file system error code
4395
  * ebx = number of written bytes (possibly 0)
3993
  * ebx = number of written bytes (possibly 0)
4396
Remarks:
3994
Remarks:
4397
  * The file must already exist, otherwise function returns eax=5.
3995
  * The file must already exist, otherwise function returns eax=5.
4398
  * The only result of write 0 bytes is update in the file attributes
3996
  * The only result of write 0 bytes is update in the file attributes
4399
    date/time of modification and access to the current date/time.
3997
    date/time of modification and access to the current date/time.
4400
  * If beginning and/or ending position is greater than file size
3998
  * If beginning and/or ending position is greater than file size
4401
    (except for the previous case), the file is expanded to needed
3999
    (except for the previous case), the file is expanded to needed
4402
    size with zero characters.
4000
    size with zero characters.
4403
  * The function is not supported for CD (returns error code 2).
4001
  * The function is not supported for CD (returns error code 2).
4404
 
4002
 
4405
======================================================================
4003
======================================================================
4406
============ Function 70, subfunction 4 - set end of file. ===========
4004
============ Function 70, subfunction 4 - set end of file. ===========
4407
======================================================================
4005
======================================================================
4408
Parameters:
4006
Parameters:
4409
  * eax = 70 - function number
4007
  * eax = 70 - function number
4410
  * ebx = pointer to the information structure
4008
  * ebx = pointer to the information structure
4411
Format of the information structure:
4009
Format of the information structure:
4412
  * +0: dword: 4 = subfunction number
4010
  * +0: dword: 4 = subfunction number
4413
  * +4: dword: low dword of new file size
4011
  * +4: dword: low dword of new file size
4414
  * +8: dword: high dword of new file size (must be 0 for FAT)
4012
  * +8: dword: high dword of new file size (must be 0 for FAT)
4415
  * +12 = +0xC: dword: 0 (reserved)
4013
  * +12 = +0xC: dword: 0 (reserved)
4416
  * +16 = +0x10: dword: 0 (reserved)
4014
  * +16 = +0x10: dword: 0 (reserved)
4417
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4015
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4418
    given in the general description
4016
    given in the general description
4419
    or
4017
    or
4420
  * +20 = +0x14: db 0
4018
  * +20 = +0x14: db 0
4421
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4019
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4422
Returned value:
4020
Returned value:
4423
  * eax = 0 - success, otherwise file system error code
4021
  * eax = 0 - success, otherwise file system error code
4424
  * ebx destroyed
4022
  * ebx destroyed
4425
Remarks:
4023
Remarks:
4426
  * If the new file size is less than old one, file is truncated.
4024
  * If the new file size is less than old one, file is truncated.
4427
    If the new size is greater than old one, file is expanded with
4025
    If the new size is greater than old one, file is expanded with
4428
    characters with code 0. If the new size is equal to old one,
4026
    characters with code 0. If the new size is equal to old one,
4429
    the only result of call is set date/time of modification and
4027
    the only result of call is set date/time of modification and
4430
    access to the current date/time.
4028
    access to the current date/time.
4431
  * If there is not enough free space on disk for expansion, the
4029
  * If there is not enough free space on disk for expansion, the
4432
    function will expand to maximum possible size and then return
4030
    function will expand to maximum possible size and then return
4433
    error code 8.
4031
    error code 8.
4434
  * The function is not supported for CD (returns error code 2).
4032
  * The function is not supported for CD (returns error code 2).
4435
 
4033
 
4436
======================================================================
4034
======================================================================
4437
==== Function 70, subfunction 5 - get information on file/folder. ====
4035
==== Function 70, subfunction 5 - get information on file/folder. ====
4438
======================================================================
4036
======================================================================
4439
Parameters:
4037
Parameters:
4440
  * eax = 70 - function number
4038
  * eax = 70 - function number
4441
  * ebx = pointer to the information structure
4039
  * ebx = pointer to the information structure
4442
Format of the information structure:
4040
Format of the information structure:
4443
  * +0: dword: 5 = subfunction number
4041
  * +0: dword: 5 = subfunction number
4444
  * +4: dword: 0 (reserved)
4042
  * +4: dword: 0 (reserved)
4445
  * +8: dword: 0 (reserved)
4043
  * +8: dword: 0 (reserved)
4446
  * +12 = +0xC: dword: 0 (reserved)
4044
  * +12 = +0xC: dword: 0 (reserved)
4447
  * +16 = +0x10: dword: pointer to buffer for data (40 bytes)
4045
  * +16 = +0x10: dword: pointer to buffer for data (40 bytes)
4448
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4046
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4449
    given in the general description
4047
    given in the general description
4450
    or
4048
    or
4451
  * +20 = +0x14: db 0
4049
  * +20 = +0x14: db 0
4452
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4050
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4453
Returned value:
4051
Returned value:
4454
  * eax = 0 - success, otherwise file system error code
4052
  * eax = 0 - success, otherwise file system error code
4455
  * ebx destroyed
4053
  * ebx destroyed
4456
Information on file is returned in the BDFE format (block of data
4054
Information on file is returned in the BDFE format (block of data
4457
for folder entry), explained in the description of
4055
for folder entry), explained in the description of
4458
subfunction 1, but without filename
4056
subfunction 1, but without filename
4459
(i.e. only first 40 = 0x28 bytes).
4057
(i.e. only first 40 = 0x28 bytes).
4460
Remarks:
4058
Remarks:
4461
  * The function does not support virtual folders such as /, /rd and
4059
  * The function does not support virtual folders such as /, /rd and
4462
    root folders like /rd/1.
4060
    root folders like /rd/1.
4463
 
4061
 
4464
======================================================================
4062
======================================================================
4465
===== Function 70, subfunction 6 - set attributes of file/folder. ====
4063
===== Function 70, subfunction 6 - set attributes of file/folder. ====
4466
======================================================================
4064
======================================================================
4467
Parameters:
4065
Parameters:
4468
  * eax = 70 - function number
4066
  * eax = 70 - function number
4469
  * ebx = pointer to the information structure
4067
  * ebx = pointer to the information structure
4470
Format of the information structure:
4068
Format of the information structure:
4471
  * +0: dword: 6 = subfunction number
4069
  * +0: dword: 6 = subfunction number
4472
  * +4: dword: 0 (reserved)
4070
  * +4: dword: 0 (reserved)
4473
  * +8: dword: 0 (reserved)
4071
  * +8: dword: 0 (reserved)
4474
  * +12 = +0xC: dword: 0 (reserved)
4072
  * +12 = +0xC: dword: 0 (reserved)
4475
  * +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
4073
  * +16 = +0x10: dword: pointer to buffer with attributes (32 bytes)
4476
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4074
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4477
    given in the general description
4075
    given in the general description
4478
    or
4076
    or
4479
  * +20 = +0x14: db 0
4077
  * +20 = +0x14: db 0
4480
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4078
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4481
Returned value:
4079
Returned value:
4482
  * eax = 0 - success, otherwise file system error code
4080
  * eax = 0 - success, otherwise file system error code
4483
  * ebx destroyed
4081
  * ebx destroyed
4484
File attributes are first 32 bytes in BDFE (block of data
4082
File attributes are first 32 bytes in BDFE (block of data
4485
for folder entry), explained in the description of subfunction 1
4083
for folder entry), explained in the description of subfunction 1
4486
(that is, without name and size of file). Attribute
4084
(that is, without name and size of file). Attribute
4487
file/folder/volume label (bits 3,4 in dword +0) is not changed.
4085
file/folder/volume label (bits 3,4 in dword +0) is not changed.
4488
Byte +4 (name format) is ignored.
4086
Byte +4 (name format) is ignored.
4489
Remarks:
4087
Remarks:
4490
  * The function does not support virtual folders such as /, /rd and
4088
  * The function does not support virtual folders such as /, /rd and
4491
    root folders like /rd/1.
4089
    root folders like /rd/1.
4492
  * The function is not supported for CD (returns error code 2).
4090
  * The function is not supported for CD (returns error code 2).
4493
 
4091
 
4494
======================================================================
4092
======================================================================
4495
=========== Function 70, subfunction 7 - start application. ==========
4093
=========== Function 70, subfunction 7 - start application. ==========
4496
======================================================================
4094
======================================================================
4497
Parameters:
4095
Parameters:
4498
  * eax = 70 - function number
4096
  * eax = 70 - function number
4499
  * ebx = pointer to the information structure
4097
  * ebx = pointer to the information structure
4500
Format of the information structure:
4098
Format of the information structure:
4501
  * +0: dword: 7 = subfunction number
4099
  * +0: dword: 7 = subfunction number
4502
  * +4: dword: flags field:
4100
  * +4: dword: flags field:
4503
    * bit 0: start process as debugged
4101
    * bit 0: start process as debugged
4504
    * other bits are reserved and must be set to 0
4102
    * other bits are reserved and must be set to 0
4505
  * +8: dword: 0 or pointer to ASCIIZ-string with parameters
4103
  * +8: dword: 0 or pointer to ASCIIZ-string with parameters
4506
  * +12 = +0xC: dword: 0 (reserved)
4104
  * +12 = +0xC: dword: 0 (reserved)
4507
  * +16 = +0x10: dword: 0 (reserved)
4105
  * +16 = +0x10: dword: 0 (reserved)
4508
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4106
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4509
    given in the general description
4107
    given in the general description
4510
    or
4108
    or
4511
  * +20 = +0x14: db 0
4109
  * +20 = +0x14: db 0
4512
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4110
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4513
Returned value:
4111
Returned value:
4514
  * eax > 0 - program is loaded, eax contains PID
4112
  * eax > 0 - program is loaded, eax contains PID
4515
  * eax < 0 - an error has occured, -eax contains
4113
  * eax < 0 - an error has occured, -eax contains
4516
    file system error code
4114
    file system error code
4517
  * ebx destroyed
4115
  * ebx destroyed
4518
Remarks:
4116
Remarks:
4519
  * Command line must be terminated by the character with the code 0
4117
  * Command line must be terminated by the character with the code 0
4520
    (ASCIIZ-string); function takes into account either all characters
4118
    (ASCIIZ-string); function takes into account either all characters
4521
    up to terminating zero inclusively or first 256 character
4119
    up to terminating zero inclusively or first 256 character
4522
    regarding what is less.
4120
    regarding what is less.
4523
  * If the process is started as debugged, it is created in
4121
  * If the process is started as debugged, it is created in
4524
    the suspended state; to run use subfunction 5 of function 69.
4122
    the suspended state; to run use subfunction 5 of function 69.
4525
 
4123
 
4526
======================================================================
4124
======================================================================
4527
========== Function 70, subfunction 8 - delete file/folder. ==========
4125
========== Function 70, subfunction 8 - delete file/folder. ==========
4528
======================================================================
4126
======================================================================
4529
Parameters:
4127
Parameters:
4530
  * eax = 70 - function number
4128
  * eax = 70 - function number
4531
  * ebx = pointer to the information structure
4129
  * ebx = pointer to the information structure
4532
Format of the information structure:
4130
Format of the information structure:
4533
  * +0: dword: 8 = subfunction number
4131
  * +0: dword: 8 = subfunction number
4534
  * +4: dword: 0 (reserved)
4132
  * +4: dword: 0 (reserved)
4535
  * +8: dword: 0 (reserved)
4133
  * +8: dword: 0 (reserved)
4536
  * +12 = +0xC: dword: 0 (reserved)
4134
  * +12 = +0xC: dword: 0 (reserved)
4537
  * +16 = +0x10: dword: 0 (reserved)
4135
  * +16 = +0x10: dword: 0 (reserved)
4538
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4136
  * +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
4539
    given in the general description
4137
    given in the general description
4540
    or
4138
    or
4541
  * +20 = +0x14: db 0
4139
  * +20 = +0x14: db 0
4542
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4140
  * +21 = +0x15: dd pointer to ASCIIZ-string with file name
4543
Returned value:
4141
Returned value:
4544
  * eax = 0 - success, otherwise file system error code
4142
  * eax = 0 - success, otherwise file system error code
4545
  * ebx destroyed
4143
  * ebx destroyed
4546
Remarks:
4144
Remarks:
4547
  * The function is not supported for CD (returns error code 2).
4145
  * The function is not supported for CD (returns error code 2).
4548
  * The function can delete only empty folders (attempt to delete
4146
  * The function can delete only empty folders (attempt to delete
4549
    nonempty folder results in error with code 10, "access denied").
4147
    nonempty folder results in error with code 10, "access denied").
4550
 
4148
 
4551
======================================================================
4149
======================================================================
4552
============= Function 70, subfunction 9 - create folder. ============
4150
============= Function 70, subfunction 9 - create folder. ============
4553
======================================================================
4151
======================================================================
4554
Parameters:
4152
Parameters:
4555
  * eax = 70 - function number
4153
  * eax = 70 - function number
4556
  * ebx = pointer to the information structure
4154
  * ebx = pointer to the information structure
4557
Format of the information structure:
4155
Format of the information structure:
4558
  * +0: dword: 9 = subfunction number
4156
  * +0: dword: 9 = subfunction number
4559
  * +4: dword: 0 (reserved)
4157
  * +4: dword: 0 (reserved)
4560
  * +8: dword: 0 (reserved)
4158
  * +8: dword: 0 (reserved)
4561
  * +12 = +0xC: dword: 0 (reserved)
4159
  * +12 = +0xC: dword: 0 (reserved)
4562
  * +16 = +0x10: dword: 0 (reserved)
4160
  * +16 = +0x10: dword: 0 (reserved)
4563
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
4161
  * +20 = +0x14: ASCIIZ-name of folder, the rules of names forming are
4564
    given in the general description
4162
    given in the general description
4565
    or
4163
    or
4566
  * +20 = +0x14: db 0
4164
  * +20 = +0x14: db 0
4567
  * +21 = +0x15: dd pointer to ASCIIZ-string with folder name
4165
  * +21 = +0x15: dd pointer to ASCIIZ-string with folder name
4568
Returned value:
4166
Returned value:
4569
  * eax = 0 - success, otherwise file system error code
4167
  * eax = 0 - success, otherwise file system error code
4570
  * ebx destroyed
4168
  * ebx destroyed
4571
Remarks:
4169
Remarks:
4572
  * The function is not supported for CD (returns error code 2).
4170
  * The function is not supported for CD (returns error code 2).
4573
  * The parent folder must already exist.
4171
  * The parent folder must already exist.
4574
  * If target folder already exists, function returns success (eax=0).
4172
  * If target folder already exists, function returns success (eax=0).
4575
 
4173
 
4576
======================================================================
4174
======================================================================
4577
========== Function 71, subfunction 1 - set window caption. ==========
4175
========== Function 71, subfunction 1 - set window caption. ==========
4578
======================================================================
4176
======================================================================
4579
Parameters:
4177
Parameters:
4580
  * eax = 71 - function number
4178
  * eax = 71 - function number
4581
  * ebx = 1 - subfunction number
4179
  * ebx = 1 - subfunction number
4582
  * ecx = pointer to caption string
4180
  * ecx = pointer to caption string
4583
Returned value:
4181
Returned value:
4584
  * function does not return value
4182
  * function does not return value
4585
Remarks:
4183
Remarks:
4586
  * String must be in the ASCIIZ-format. Disregarding real string
4184
  * String must be in the ASCIIZ-format. Disregarding real string
4587
    length, no more than 255 characters are drawn.
4185
    length, no more than 255 characters are drawn.
4588
  * Pass NULL in ecx to remove caption.
4186
  * Pass NULL in ecx to remove caption.
4589
 
4187
 
4590
======================================================================
4188
======================================================================
4591
=============== Function 72 - send message to a window. ==============
4189
=============== Function 72 - send message to a window. ==============
4592
======================================================================
4190
======================================================================
4593
 
4191
 
4594
- Subfunction 1 - send message with parameter to the active window. --
4192
- Subfunction 1 - send message with parameter to the active window. --
4595
Parameters:
4193
Parameters:
4596
  * eax = 72 - function number
4194
  * eax = 72 - function number
4597
  * ebx = 1 - subfunction number
4195
  * ebx = 1 - subfunction number
4598
  * ecx = event code: 2 or 3
4196
  * ecx = event code: 2 or 3
4599
  * edx = parameter: key code for ecx=2, button identifier for ecx=3
4197
  * edx = parameter: key code for ecx=2, button identifier for ecx=3
4600
Returned value:
4198
Returned value:
4601
  * eax = 0 - success
4199
  * eax = 0 - success
4602
  * eax = 1 - buffer is full
4200
  * eax = 1 - buffer is full
4603
 
4201
 
4604
======================================================================
4202
======================================================================
4605
===================== Function 73 - blit bitmap  =====================
4203
===================== Function 73 - blit bitmap  =====================
4606
======================================================================
4204
======================================================================
4607
 
4205
 
4608
Parameters:
4206
Parameters:
4609
  * eax = 73 - function number
4207
  * eax = 73 - function number
4610
 
4208
 
4611
  * ebx = ROP and optional flags
4209
  * ebx = ROP and optional flags
4612
     31           6 5  4 3   0
4210
     31           6 5  4 3   0
4613
     [  reserved  ][T][B][ROP]
4211
     [  reserved  ][T][B][ROP]
4614
     ROP - raster operation code
4212
     ROP - raster operation code
4615
        0: Copy
4213
        0: Copy
4616
     1-15: reserved
4214
     1-15: reserved
4617
     B   - blit into the background surface
4215
     B   - blit into the background surface
4618
     T   - transparent blit
4216
     T   - transparent blit
4619
 
4217
 
4620
  * ecx = pointer to the function parameters
4218
  * ecx = pointer to the function parameters
4621
        destination offset and clipping
4219
        destination offset and clipping
4622
     +0 signed dword: destination rectangle X offset from the window
4220
     +0 signed dword: destination rectangle X offset from the window
4623
                      top-left corner
4221
                      top-left corner
4624
     +4 signed dword: destination rectangle Y offset from the window
4222
     +4 signed dword: destination rectangle Y offset from the window
4625
                      top-left corner
4223
                      top-left corner
4626
     +8 dword:        destination rectangle width
4224
     +8 dword:        destination rectangle width
4627
    +12 dword:        destination rectangle height
4225
    +12 dword:        destination rectangle height
4628
 
4226
 
4629
        source offset and clipping
4227
        source offset and clipping
4630
    +16 signed dword: source rectangle X offset from the bitmap
4228
    +16 signed dword: source rectangle X offset from the bitmap
4631
                      top-left corner
4229
                      top-left corner
4632
    +20 signed dword: source rectangle Y offset from the bitmap
4230
    +20 signed dword: source rectangle Y offset from the bitmap
4633
                      top-left corner
4231
                      top-left corner
4634
    +24 dword:        source rectangle width
4232
    +24 dword:        source rectangle width
4635
    +28 dword:        source rectangle height
4233
    +28 dword:        source rectangle height
4636
 
4234
 
4637
    +32: dword: bitmap data - must be 32bpp
4235
    +32: dword: bitmap data - must be 32bpp
4638
    +36: dword: size of the bitmap row in bytes
4236
    +36: dword: size of the bitmap row in bytes
4639
 
4237
 
4640
Returned value:
4238
Returned value:
4641
  * function does not return value
4239
  * function does not return value
4642
 
4240
 
4643
======================================================================
4241
======================================================================
4644
= Function 74, Subfunction -1, Get number of active network devices. =
4242
= Function 74, Subfunction -1, Get number of active network devices. =
4645
======================================================================
4243
======================================================================
4646
Parameters:
4244
Parameters:
4647
  * eax = 74 - function number
4245
  * eax = 74 - function number
4648
  * bl = -1 - subfunction number
4246
  * bl = -1 - subfunction number
4649
Returned value:
4247
Returned value:
4650
  * eax = number of active network devices
4248
  * eax = number of active network devices
4651
 
4249
 
4652
======================================================================
4250
======================================================================
4653
======== Function 74, Subfunction 0, Get network device type. ========
4251
======== Function 74, Subfunction 0, Get network device type. ========
4654
======================================================================
4252
======================================================================
4655
Parameters:
4253
Parameters:
4656
  * eax = 74 - function number
4254
  * eax = 74 - function number
4657
  * bl = 0 - subfunction number
4255
  * bl = 0 - subfunction number
4658
  * bh = device number
4256
  * bh = device number
4659
Returned value:
4257
Returned value:
4660
  * eax = device type
4258
  * eax = device type
4661
 
4259
 
4662
======================================================================
4260
======================================================================
4663
======== Function 74, Subfunction 1, Get network device name. ========
4261
======== Function 74, Subfunction 1, Get network device name. ========
4664
======================================================================
4262
======================================================================
4665
Parameters:
4263
Parameters:
4666
  * eax = 74 - function number
4264
  * eax = 74 - function number
4667
  * bl = 1 - subfunction number
4265
  * bl = 1 - subfunction number
4668
  * bh = device number
4266
  * bh = device number
4669
  * ecx = pointer to 64 byte buffer
4267
  * ecx = pointer to 64 byte buffer
4670
Returned value:
4268
Returned value:
4671
  * eax = -1 on error
4269
  * eax = -1 on error
4672
  * The network device name is written into the buffer, on success
4270
  * The network device name is written into the buffer, on success
4673
 
4271
 
4674
======================================================================
4272
======================================================================
4675
========= Function 74, Subfunction 2, Reset network device. ==========
4273
========= Function 74, Subfunction 2, Reset network device. ==========
4676
======================================================================
4274
======================================================================
4677
Parameters:
4275
Parameters:
4678
  * eax = 74 - function number
4276
  * eax = 74 - function number
4679
  * bl = 2 - subfunction number
4277
  * bl = 2 - subfunction number
4680
  * bh = device number
4278
  * bh = device number
4681
Returned value:
4279
Returned value:
4682
  * eax = -1 on error
4280
  * eax = -1 on error
4683
 
4281
 
4684
======================================================================
4282
======================================================================
4685
========== Function 74, Subfunction 3, Stop network device. ==========
4283
========== Function 74, Subfunction 3, Stop network device. ==========
4686
======================================================================
4284
======================================================================
4687
Parameters:
4285
Parameters:
4688
  * eax = 74 - function number
4286
  * eax = 74 - function number
4689
  * bl = 3 - subfunction number
4287
  * bl = 3 - subfunction number
4690
  * bh = device number
4288
  * bh = device number
4691
Returned value:
4289
Returned value:
4692
  * eax = -1 on error
4290
  * eax = -1 on error
4693
 
4291
 
4694
======================================================================
4292
======================================================================
4695
============== Function 75, Subfunction 0, Open socket. ==============
4293
============== Function 75, Subfunction 0, Open socket. ==============
4696
======================================================================
4294
======================================================================
4697
Parameters:
4295
Parameters:
4698
  * eax = 75 - function number
4296
  * eax = 75 - function number
4699
  * bl = 0 - subfunction number
4297
  * bl = 0 - subfunction number
4700
  * ecx = domain
4298
  * ecx = domain
4701
  * edx = type
4299
  * edx = type
4702
  * esi = protocol
4300
  * esi = protocol
4703
Returned value:
4301
Returned value:
4704
  * eax = socket number, -1 on error
4302
  * eax = socket number, -1 on error
4705
 
4303
 
4706
======================================================================
4304
======================================================================
4707
============= Function 75, Subfunction 1, Close socket. ==============
4305
============= Function 75, Subfunction 1, Close socket. ==============
4708
======================================================================
4306
======================================================================
4709
Parameters:
4307
Parameters:
4710
  * eax = 75 - function number
4308
  * eax = 75 - function number
4711
  * bl = 1 - subfunction number
4309
  * bl = 1 - subfunction number
4712
  * ecx = socket number
4310
  * ecx = socket number
4713
Returned value:
4311
Returned value:
4714
  * eax = -1 on error
4312
  * eax = -1 on error
4715
 
4313
 
4716
======================================================================
4314
======================================================================
4717
================== Function 75, Subfunction 2, Bind. =================
4315
================== Function 75, Subfunction 2, Bind. =================
4718
======================================================================
4316
======================================================================
4719
Parameters:
4317
Parameters:
4720
  * eax = 75 - function number
4318
  * eax = 75 - function number
4721
  * bl = 2 - subfunction number
4319
  * bl = 2 - subfunction number
4722
  * ecx = socket number
4320
  * ecx = socket number
4723
  * edx = pointer to sockaddr structure
4321
  * edx = pointer to sockaddr structure
4724
  * esi = length of sockaddr structure
4322
  * esi = length of sockaddr structure
4725
Returned value:
4323
Returned value:
4726
  * eax = -1 on error
4324
  * eax = -1 on error
4727
 
4325
 
4728
======================================================================
4326
======================================================================
4729
================= Function 75, Subfunction 3, Listen. ================
4327
================= Function 75, Subfunction 3, Listen. ================
4730
======================================================================
4328
======================================================================
4731
Parameters:
4329
Parameters:
4732
  * eax = 75 - function number
4330
  * eax = 75 - function number
4733
  * bl = 3 - subfunction number
4331
  * bl = 3 - subfunction number
4734
  * ecx = socket number
4332
  * ecx = socket number
4735
  * edx = backlog
4333
  * edx = backlog
4736
Returned value:
4334
Returned value:
4737
  * eax = -1 on error
4335
  * eax = -1 on error
4738
 
4336
 
4739
======================================================================
4337
======================================================================
4740
================ Function 75, Subfunction 4, Connect. ================
4338
================ Function 75, Subfunction 4, Connect. ================
4741
======================================================================
4339
======================================================================
4742
Parameters:
4340
Parameters:
4743
  * eax = 75 - function number
4341
  * eax = 75 - function number
4744
  * bl = 4 - subfunction number
4342
  * bl = 4 - subfunction number
4745
  * ecx = socket number
4343
  * ecx = socket number
4746
  * edx = pointer to sockaddr structure
4344
  * edx = pointer to sockaddr structure
4747
  * esi = length of sockaddr structure
4345
  * esi = length of sockaddr structure
4748
Returned value:
4346
Returned value:
4749
  * eax = -1 on error
4347
  * eax = -1 on error
4750
 
4348
 
4751
======================================================================
4349
======================================================================
4752
================= Function 75, Subfunction 5, Accept. ================
4350
================= Function 75, Subfunction 5, Accept. ================
4753
======================================================================
4351
======================================================================
4754
Parameters:
4352
Parameters:
4755
  * eax = 75 - function number
4353
  * eax = 75 - function number
4756
  * bl = 5 - subfunction number
4354
  * bl = 5 - subfunction number
4757
  * ecx = socket number
4355
  * ecx = socket number
4758
  * edx = pointer to sockaddr structure
4356
  * edx = pointer to sockaddr structure
4759
  * esi = length of sockaddr structure
4357
  * esi = length of sockaddr structure
4760
Returned value:
4358
Returned value:
4761
  * eax = -1 on error
4359
  * eax = -1 on error
4762
 
4360
 
4763
======================================================================
4361
======================================================================
4764
================== Function 75, Subfunction 6, Send. =================
4362
================== Function 75, Subfunction 6, Send. =================
4765
======================================================================
4363
======================================================================
4766
Parameters:
4364
Parameters:
4767
  * eax = 75 - function number
4365
  * eax = 75 - function number
4768
  * bl = 6 - subfunction number
4366
  * bl = 6 - subfunction number
4769
  * ecx = socket number
4367
  * ecx = socket number
4770
  * edx = pointer to buffer
4368
  * edx = pointer to buffer
4771
  * esi = length of buffer
4369
  * esi = length of buffer
4772
Returned value:
4370
Returned value:
4773
  * eax = number of bytes copied, -1 on error
4371
  * eax = number of bytes copied, -1 on error
4774
 
4372
 
4775
======================================================================
4373
======================================================================
4776
================ Function 75, Subfunction 7, Receive. ================
4374
================ Function 75, Subfunction 7, Receive. ================
4777
======================================================================
4375
======================================================================
4778
Parameters:
4376
Parameters:
4779
  * eax = 75 - function number
4377
  * eax = 75 - function number
4780
  * bl = 7 - subfunction number
4378
  * bl = 7 - subfunction number
4781
  * ecx = socket number
4379
  * ecx = socket number
4782
  * edx = pointer to buffer
4380
  * edx = pointer to buffer
4783
  * esi = length of buffer
4381
  * esi = length of buffer
4784
  * edi = flags
4382
  * edi = flags
4785
Returned value:
4383
Returned value:
4786
  * eax = number of bytes copied, -1 on error
4384
  * eax = number of bytes copied, -1 on error
4787
 
4385
 
4788
======================================================================
4386
======================================================================
4789
=========== Function 75, Subfunction 8, Set socket options. ==========
4387
=========== Function 75, Subfunction 8, Set socket options. ==========
4790
======================================================================
4388
======================================================================
4791
Parameters:
4389
Parameters:
4792
  * eax = 75 - function number
4390
  * eax = 75 - function number
4793
  * bl = 8 - subfunction number
4391
  * bl = 8 - subfunction number
4794
  * ecx = socket number
4392
  * ecx = socket number
4795
  * edx = pointer to optstruct
4393
  * edx = pointer to optstruct
4796
Returned value:
4394
Returned value:
4797
  * eax = -1 on error
4395
  * eax = -1 on error
4798
Remarks:
4396
Remarks:
4799
 
4397
 
4800
  Optstruct: dd level
4398
  Optstruct: dd level
4801
             dd optionname
4399
             dd optionname
4802
             dd optlength
4400
             dd optlength
4803
             db options...
4401
             db options...
4804
 
4402
 
4805
======================================================================
4403
======================================================================
4806
=========== Function 75, Subfunction 9, Get socket options. ==========
4404
=========== Function 75, Subfunction 9, Get socket options. ==========
4807
======================================================================
4405
======================================================================
4808
Parameters:
4406
Parameters:
4809
  * eax = 75 - function number
4407
  * eax = 75 - function number
4810
  * bl = 9 - subfunction number
4408
  * bl = 9 - subfunction number
4811
  * ecx = socket number
4409
  * ecx = socket number
4812
  * edx = pointer to optstruct
4410
  * edx = pointer to optstruct
4813
Returned value:
4411
Returned value:
4814
  * eax = -1 on error
4412
  * eax = -1 on error
4815
Remarks:
4413
Remarks:
4816
 
4414
 
4817
  Optstruct: dd level
4415
  Optstruct: dd level
4818
             dd optionname
4416
             dd optionname
4819
             dd optlength
4417
             dd optlength
4820
             db options...
4418
             db options...
4821
 
4419
 
4822
======================================================================
4420
======================================================================
4823
============ Function 75, Subfunction 10, Get socketpair. ===========
4421
============ Function 75, Subfunction 10, Get socketpair. ===========
4824
======================================================================
4422
======================================================================
4825
Parameters:
4423
Parameters:
4826
  * eax = 75 - function number
4424
  * eax = 75 - function number
4827
  * bl = 10 - subfunction number
4425
  * bl = 10 - subfunction number
4828
Returned value:
4426
Returned value:
4829
  * eax = socketnum1, -1 on error
4427
  * eax = socketnum1, -1 on error
4830
  * ebx = socketnum2
4428
  * ebx = socketnum2
4831
Remarks:
4429
Remarks:
4832
 
4430
 
4833
  Optstruct: dd level
4431
  Optstruct: dd level
4834
             dd optionname
4432
             dd optionname
4835
             dd optlength
4433
             dd optlength
4836
             db options...
4434
             db options...
4837
 
4435
 
4838
======================================================================
4436
======================================================================
4839
=============== Function -1 - terminate thread/process ===============
4437
=============== Function -1 - terminate thread/process ===============
4840
======================================================================
4438
======================================================================
4841
Parameters:
4439
Parameters:
4842
  * eax = -1 - function number
4440
  * eax = -1 - function number
4843
Returned value:
4441
Returned value:
4844
  * function does not return neither value nor control
4442
  * function does not return neither value nor control
4845
Remarks:
4443
Remarks:
4846
  * If the process did not create threads obviously, it has only
4444
  * If the process did not create threads obviously, it has only
4847
    one thread, which termination results in process termination.
4445
    one thread, which termination results in process termination.
4848
  * If the current thread is last in the process, its termination
4446
  * If the current thread is last in the process, its termination
4849
    also results in process terminates.
4447
    also results in process terminates.
4850
  * This function terminates the current thread. Other thread can be
4448
  * This function terminates the current thread. Other thread can be
4851
    killed by call to subfunction 2 of function 18.
4449
    killed by call to subfunction 2 of function 18.
4852
 
4450
 
4853
======================================================================
4451
======================================================================
4854
=========================== List of events ===========================
4452
=========================== List of events ===========================
4855
======================================================================
4453
======================================================================
4856
Next event can be retrieved by the call of one from functions 10
4454
Next event can be retrieved by the call of one from functions 10
4857
(to wait for event), 11 (to check without waiting), 23
4455
(to wait for event), 11 (to check without waiting), 23
4858
(to wait during the given time).
4456
(to wait during the given time).
4859
These functions return only those events, which enter into a mask set
4457
These functions return only those events, which enter into a mask set
4860
by function 40. By default it is first three,
4458
by function 40. By default it is first three,
4861
there is enough for most applications.
4459
there is enough for most applications.
4862
Codes of events:
4460
Codes of events:
4863
  * 1 = redraw event (is reset by call to function 0)
4461
  * 1 = redraw event (is reset by call to function 0)
4864
  * 2 = key on keyboard is pressed (acts, only when the window is
4462
  * 2 = key on keyboard is pressed (acts, only when the window is
4865
    active) or hotkey is pressed; is reset, when all keys from
4463
    active) or hotkey is pressed; is reset, when all keys from
4866
    the buffer are read out by function 2
4464
    the buffer are read out by function 2
4867
  * 3 = button is pressed, defined earlier by function 8
4465
  * 3 = button is pressed, defined earlier by function 8
4868
    (or close button, created implicitly by function 0;
4466
    (or close button, created implicitly by function 0;
4869
    minimize button is handled by the system and sends no message;
4467
    minimize button is handled by the system and sends no message;
4870
    acts, only when the window is active;
4468
    acts, only when the window is active;
4871
    is reset when all buttons from the buffer
4469
    is reset when all buttons from the buffer
4872
    are read out by function 17)
4470
    are read out by function 17)
4873
  * 4 = reserved (in current implementation never comes even after
4471
  * 4 = reserved (in current implementation never comes even after
4874
    unmasking by function 40)
4472
    unmasking by function 40)
4875
  * 5 = kernel finished redrawing of the desktop background
4473
  * 5 = kernel finished redrawing of the desktop background
4876
  * 6 = mouse event (something happened - button pressing or moving;
4474
  * 6 = mouse event (something happened - button pressing or moving;
4877
    is reset at reading)
4475
    is reset at reading)
4878
  * 7 = IPC event (see function 60 -
4476
  * 7 = IPC event (see function 60 -
4879
    Inter Process Communication; is reset at reading)
4477
    Inter Process Communication; is reset at reading)
4880
  * 8 = network event (is reset at reading)
4478
  * 8 = network event (is reset at reading)
4881
  * 9 = debug event (is reset at reading; see
4479
  * 9 = debug event (is reset at reading; see
4882
    debug subsystem)
4480
    debug subsystem)
4883
  * 16..31 = event with appropriate IRQ
4481
  * 16..31 = event with appropriate IRQ
4884
    (16=IRQ0, 31=IRQ15) (is reset after reading all IRQ data)
4482
    (16=IRQ0, 31=IRQ15) (is reset after reading all IRQ data)
4885
 
4483
 
4886
======================================================================
4484
======================================================================
4887
=================== Error codes of the file system ===================
4485
=================== Error codes of the file system ===================
4888
======================================================================
4486
======================================================================
4889
  * 0 = success
4487
  * 0 = success
4890
  * 1 = base and/or partition of a hard disk is not defined
4488
  * 1 = base and/or partition of a hard disk is not defined
4891
    (by subfunctions 7, 8 of function 21)
4489
    (by subfunctions 7, 8 of function 21)
4892
  * 2 = function is not supported for the given file system
4490
  * 2 = function is not supported for the given file system
4893
  * 3 = unknown file system
4491
  * 3 = unknown file system
4894
  * 4 = reserved, is never returned in the current implementation
4492
  * 4 = reserved, is never returned in the current implementation
4895
  * 5 = file not found
4493
  * 5 = file not found
4896
  * 6 = end of file, EOF
4494
  * 6 = end of file, EOF
4897
  * 7 = pointer lies outside of application memory
4495
  * 7 = pointer lies outside of application memory
4898
  * 8 = disk is full
4496
  * 8 = disk is full
4899
  * 9 = FAT table is destroyed
4497
  * 9 = FAT table is destroyed
4900
  * 10 = access denied
4498
  * 10 = access denied
4901
  * 11 = device error
4499
  * 11 = device error
4902
Application start functions can return also following errors:
4500
Application start functions can return also following errors:
4903
  * 30 = 0x1E = not enough memory
4501
  * 30 = 0x1E = not enough memory
4904
  * 31 = 0x1F = file is not executable
4502
  * 31 = 0x1F = file is not executable
4905
  * 32 = 0x20 = too many processes
4503
  * 32 = 0x20 = too many processes
4906
>
4504
>
4907
>
4505
>