Rev 4265 | Rev 5565 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4265 | Rev 5201 | ||
---|---|---|---|
Line 84... | Line 84... | ||
84 | Это означает, что реальные размеры на 1 пиксель больше. |
84 | Это означает, что реальные размеры на 1 пиксель больше. |
85 | * Вид окна типа I: |
85 | * Вид окна типа I: |
86 | * рисуется внешняя рамка цвета, указанного в edi, |
86 | * рисуется внешняя рамка цвета, указанного в edi, |
87 | шириной 1 пиксель |
87 | шириной 1 пиксель |
88 | * рисуется заголовок - прямоугольник с левым верхним углом (1,1) |
88 | * рисуется заголовок - прямоугольник с левым верхним углом (1,1) |
89 | и правым нижним (xsize-1,min(25,ysize)) цвета, указанного в esi |
89 | и правым нижним (xsize-1,min(20,ysize-1)) цвета, указанного в esi |
90 | (с учетом градиента) |
90 | (с учетом градиента) |
91 | * если ysize>=26, то закрашивается рабочая область окна - |
91 | * если ysize>21, то закрашивается рабочая область окна - |
92 | прямоугольник с левым верхним углом (1,21) и правым нижним |
92 | прямоугольник с левым верхним углом (1,21) и правым нижним |
93 | (xsize-1,ysize-1) (размерами (xsize-1)*(ysize-21)) - цветом, |
93 | (xsize-1,ysize-1) (размерами (xsize-1)*(ysize-21)) - цветом, |
94 | указанным в edx (с учетом градиента) |
94 | указанным в edx (с учетом градиента) |
95 | * если A=1 и строка заголовка установлена подфункцией 1 |
95 | * если A=1 и строка заголовка установлена подфункцией 1 |
96 | функции 71, то она выводится в соответствующем месте заголовка |
96 | функции 71, то она выводится в соответствующем месте заголовка |
Line 149... | Line 149... | ||
149 | Параметры: |
149 | Параметры: |
150 | * eax = 2 - номер функции |
150 | * eax = 2 - номер функции |
151 | Возвращаемое значение: |
151 | Возвращаемое значение: |
152 | * если буфер пуст, возвращается eax=1 |
152 | * если буфер пуст, возвращается eax=1 |
153 | * если буфер непуст, то возвращается al=0, ah=код нажатой клавиши, |
153 | * если буфер непуст, то возвращается al=0, ah=код нажатой клавиши, |
- | 154 | биты 16-23 содержат сканкод нажатой клавиши в режиме ASCII, |
|
154 | старшее слово регистра eax обнулено |
155 | в режме сканкодов биты обнулены. |
- | 156 | биты 23-31 обнулены |
|
155 | * если есть "горячая клавиша", то возвращается |
157 | * если есть "горячая клавиша", то возвращается |
156 | al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш), |
158 | al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш), |
157 | старшее слово регистра eax содержит состояние управляющих клавиш |
159 | старшее слово регистра eax содержит состояние управляющих клавиш |
158 | в момент нажатия горячей клавиши |
160 | в момент нажатия горячей клавиши |
159 | Замечания: |
161 | Замечания: |
Line 814... | Line 816... | ||
814 | Замечания: |
816 | Замечания: |
815 | * Не следует полагаться на возвращаемое значение при неверном |
817 | * Не следует полагаться на возвращаемое значение при неверном |
816 | вызове, оно может измениться в последующих версиях ядра. |
818 | вызове, оно может измениться в последующих версиях ядра. |
Line 817... | Line 819... | ||
817 | 819 | ||
818 | ====================================================================== |
820 | ====================================================================== |
819 | ======== Функция 18, подфункция 10 - свернуть окно приложения. ======= |
821 | ========= Функция 18, подфункция 10 - свернуть активное окно. ======== |
820 | ====================================================================== |
822 | ====================================================================== |
821 | Сворачивает собственное окно. |
823 | Сворачивает активное окно. |
822 | Параметры: |
824 | Параметры: |
823 | * eax = 18 - номер функции |
825 | * eax = 18 - номер функции |
824 | * ebx = 10 - номер подфункции |
826 | * ebx = 10 - номер подфункции |
825 | Возвращаемое значение: |
827 | Возвращаемое значение: |
Line 841... | Line 843... | ||
841 | ====================================================================== |
843 | ====================================================================== |
842 | Параметры: |
844 | Параметры: |
843 | * eax = 18 - номер функции |
845 | * eax = 18 - номер функции |
844 | * ebx = 11 - номер подфункции |
846 | * ebx = 11 - номер подфункции |
845 | * ecx = тип таблицы: |
847 | * ecx = тип таблицы: |
846 | * 1 = короткая версия, 10 байт |
848 | * 1 = короткая версия, 16 байт |
847 | * 2 = полная версия, 65536 байт |
- | |
848 | * edx = указатель на буфер (в приложении) для таблицы |
849 | * edx = указатель на буфер (в приложении) для таблицы |
849 | Возвращаемое значение: |
850 | Возвращаемое значение: |
850 | * функция не возвращает значения |
851 | * функция не возвращает значения |
851 | Формат таблицы: короткая версия: |
852 | Формат таблицы: короткая версия: |
852 | * +0: byte: информация о НГМД (дисководах для дискет), AAAABBBB, |
853 | * +0: byte: информация о НГМД (дисководах для дискет), AAAABBBB, |
Line 859... | Line 860... | ||
859 | * 4 = 1.44Mb, 3.5'' |
860 | * 4 = 1.44Mb, 3.5'' |
860 | * 5 = 2.88Mb, 3.5'' (такие дискеты сейчас уже не используются) |
861 | * 5 = 2.88Mb, 3.5'' (такие дискеты сейчас уже не используются) |
861 | Например, для стандартной конфигурации из одного 1.44-дисковода |
862 | Например, для стандартной конфигурации из одного 1.44-дисковода |
862 | здесь будет 40h, а для случая 1.2Mb на A: и 1.44Mb на B: |
863 | здесь будет 40h, а для случая 1.2Mb на A: и 1.44Mb на B: |
863 | значение оказывается 24h. |
864 | значение оказывается 24h. |
- | 865 | ||
- | 866 | Первый контроллер IDE: |
|
864 | * +1: byte: информация о жёстких дисках и CD-приводах, AABBCCDD, |
867 | * +1: byte: информация о жёстких дисках и CD-приводах, AABBCCDD, |
865 | где AA соответствует контроллеру IDE0, ..., DD - IDE3: |
868 | где AA соответствует контроллеру IDE0, ..., DD - IDE3: |
866 | * 0 = устройство отсутствует |
869 | * 0 = устройство отсутствует |
867 | * 1 = жёсткий диск |
870 | * 1 = жёсткий диск |
868 | * 2 = CD-привод |
871 | * 2 = CD-привод |
869 | Например, в случае HD на IDE0 и CD на IDE2 здесь будет 48h. |
872 | Например, в случае HD на IDE0 и CD на IDE2 здесь будет 48h. |
870 | * +2: 4 db: число найденных разделов на жёстких дисках с |
873 | * +2: 4 db: число найденных разделов на жёстких дисках с |
871 | соответственно IDE0,...,IDE3. |
874 | соответственно IDE0,...,IDE3. |
- | 875 | ||
- | 876 | Второй контроллер IDE: |
|
- | 877 | * +6: byte: информация о жёстких дисках и CD-приводах, AABBCCDD |
|
- | 878 | где AA соответствует контроллеру IDE4, ..., DD - IDE7: |
|
- | 879 | * 0 = устройство отсутствует |
|
- | 880 | * 1 = жёсткий диск |
|
- | 881 | * 2 = CD-привод |
|
- | 882 | Например, в случае HD на IDE4 и CD на IDE6 здесь будет 48h. |
|
- | 883 | * +7: 4 db: число найденных разделов на жёстких дисках с |
|
- | 884 | соответственно IDE4,...,IDE7. |
|
- | 885 | ||
- | 886 | Третий контроллер IDE: |
|
- | 887 | * +11: byte: информация о жёстких дисках и CD-приводах, AABBCCDD |
|
- | 888 | где AA соответствует контроллеру IDE8, ..., DD - IDE11: |
|
- | 889 | * 0 = устройство отсутствует |
|
- | 890 | * 1 = жёсткий диск |
|
- | 891 | * 2 = CD-привод |
|
- | 892 | Например, в случае HD на IDE8 и CD на IDE10 здесь будет 48h. |
|
- | 893 | * +12: 4 db: число найденных разделов на жёстких дисках с |
|
- | 894 | соответственно IDE8,...,IDE11. |
|
- | 895 | ||
872 | При отсутствии жёсткого диска на IDEx соответствующий байт |
896 | При отсутствии жёсткого диска на IDEx соответствующий байт |
873 | нулевой, при наличии показывает число распознанных разделов, |
897 | нулевой, при наличии показывает число распознанных разделов, |
874 | которых может и не быть (если носитель не отформатирован или |
898 | которых может и не быть (если носитель не отформатирован или |
875 | если файловая система не поддерживается). В текущей версии ядра |
899 | если файловая система не поддерживается). В текущей версии ядра |
876 | для жёстких дисков поддерживаются только FAT16, FAT32 и NTFS. |
900 | для жёстких дисков поддерживаются только FAT12/16/32, NTFS, |
877 | * +6: 4 db: зарезервировано |
901 | ext2/3/4 и XFS. |
878 | Формат таблицы: полная версия: |
- | |
879 | * +0: 10 db: такие же, как и в короткой версии |
- | |
880 | * +10: 100 db: данные для первого раздела |
- | |
881 | * +110: 100 db: данные для второго раздела |
- | |
882 | * ... |
902 | |
883 | * +10+100*(n-1): 100 db: данные для последнего раздела |
- | |
884 | Разделы расположены в следующем порядке: сначала последовательно все |
- | |
885 | распознанные разделы на HD на IDE0 (если есть), |
- | |
886 | затем на HD на IDE1 (если есть) и т.д. до IDE3. |
- | |
887 | Формат информации о разделе: |
- | |
888 | * +0: dword: начальный физический сектор раздела |
- | |
889 | * +4: dword: последний физический сектор раздела |
- | |
890 | (принадлежит разделу) |
- | |
891 | * +8: byte: тип файловой системы: |
- | |
892 | 16=FAT16, 32=FAT32, 1=NTFS |
- | |
893 | * формат дальнейших данных зависит от файловой системы, |
- | |
894 | может меняться с изменениями в ядре и поэтому не описывается |
- | |
895 | Замечания: |
903 | Замечания: |
896 | * Короткая таблица может быть использована для получения информации |
904 | * Таблица может быть использована для получения информации |
897 | об имеющихся устройствах. |
905 | об имеющихся устройствах. |
Line 898... | Line 906... | ||
898 | 906 | ||
899 | ====================================================================== |
907 | ====================================================================== |
900 | ========== Функция 18, подфункция 13 - получить версию ядра. ========= |
908 | ========== Функция 18, подфункция 13 - получить версию ядра. ========= |
Line 1207... | Line 1215... | ||
1207 | самим ядром не используется; однако приложение @panel отображает |
1215 | самим ядром не используется; однако приложение @panel отображает |
1208 | соответствующую текущей стране иконку. |
1216 | соответствующую текущей стране иконку. |
1209 | * Приложение @panel переключает раскладки по запросу пользователя. |
1217 | * Приложение @panel переключает раскладки по запросу пользователя. |
Line 1210... | Line 1218... | ||
1210 | 1218 | ||
1211 | ====================================================================== |
- | |
1212 | =========== Функция 21, подфункция 3 - установить базу CD. =========== |
- | |
1213 | ====================================================================== |
- | |
1214 | Параметры: |
- | |
1215 | * eax = 21 - номер функции |
- | |
1216 | * ebx = 3 - номер подфункции |
- | |
1217 | * ecx = база CD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3 |
- | |
1218 | Возвращаемое значение: |
- | |
1219 | * eax = 0 |
- | |
1220 | Замечания: |
- | |
1221 | * База CD используется функцией 24. |
- | |
1222 | * Получить установленную базу CD можно вызовом |
- | |
1223 | подфункции 3 функции 26. |
- | |
1224 | - | ||
1225 | ====================================================================== |
1219 | ====================================================================== |
1226 | ========= Функция 21, подфункция 5 - установить язык системы. ======== |
1220 | ========= Функция 21, подфункция 5 - установить язык системы. ======== |
1227 | ====================================================================== |
1221 | ====================================================================== |
1228 | Параметры: |
1222 | Параметры: |
1229 | * eax = 21 - номер функции |
1223 | * eax = 21 - номер функции |
Line 1238... | Line 1232... | ||
1238 | * Проверок на корректность не делается, поскольку ядро эту |
1232 | * Проверок на корректность не делается, поскольку ядро эту |
1239 | переменную не использует. |
1233 | переменную не использует. |
1240 | * Получить язык системы можно вызовом подфункции 5 функции 26. |
1234 | * Получить язык системы можно вызовом подфункции 5 функции 26. |
Line 1241... | Line 1235... | ||
1241 | 1235 | ||
1242 | ====================================================================== |
- | |
1243 | =========== Функция 21, подфункция 7 - установить базу HD. =========== |
- | |
1244 | ====================================================================== |
- | |
1245 | База HD нужна для определения, на какой жёсткий диск писать, при |
- | |
1246 | использовании устаревшего синтаксиса /HD в устаревшей функции 58; |
- | |
1247 | при использовании современного синтаксиса /HD0,/HD1,/HD2,/HD3 |
- | |
1248 | база устанавливается автоматически. |
- | |
1249 | Параметры: |
- | |
1250 | * eax = 21 - номер функции |
- | |
1251 | * ebx = 7 - номер подфункции |
- | |
1252 | * ecx = база HD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3 |
- | |
1253 | Возвращаемое значение: |
- | |
1254 | * eax = 0 |
- | |
1255 | Замечания: |
- | |
1256 | * Любое приложение в любой момент времени может изменить базу. |
- | |
1257 | * Не следует изменять базу, когда какое-нибудь приложение работает |
- | |
1258 | с жёстким диском. Если не хотите глюков системы. |
- | |
1259 | * Получить установленную базу можно вызовом подфункции 7 функции 26. |
- | |
1260 | * Следует также определить используемый раздел жёсткого диска |
- | |
1261 | подфункцией 8. |
- | |
1262 | - | ||
1263 | ====================================================================== |
- | |
1264 | ========== Функция 21, подфункция 8 - установить раздел HD. ========== |
- | |
1265 | ====================================================================== |
- | |
1266 | Раздел HD нужен для определения, на какой раздел жёсткого диска |
- | |
1267 | писать, при использовании устаревшего синтаксиса /HD в устаревшей |
- | |
1268 | функции 58; при использовании современного синтаксиса |
- | |
1269 | /HD0,/HD1,/HD2,/HD3 база и раздел устанавливаются автоматически. |
- | |
1270 | Параметры: |
- | |
1271 | * eax = 21 - номер функции |
- | |
1272 | * ebx = 8 - номер подфункции |
- | |
1273 | * ecx = раздел HD (считая с 1) |
- | |
1274 | Возвращаемое значение: |
- | |
1275 | * eax = 0 |
- | |
1276 | Замечания: |
- | |
1277 | * Любое приложение в любой момент времени может изменить раздел. |
- | |
1278 | * Не следует изменять раздел, когда какое-нибудь приложение работает |
- | |
1279 | с жёстким диском. Если не хотите глюков системы. |
- | |
1280 | * Получить установленный раздел можно вызовом подфункции 8 |
- | |
1281 | функции 26. |
- | |
1282 | * Проверок на корректность не делается. |
- | |
1283 | * Узнать число разделов на жёстком диске можно вызовом |
- | |
1284 | подфункции 11 функции 18. |
- | |
1285 | * Следует также определить используемую базу жёсткого диска |
- | |
1286 | подфункцией 7. |
- | |
1287 | - | ||
1288 | ====================================================================== |
1236 | ====================================================================== |
1289 | ====================== Функция 21, подфункция 11 ===================== |
1237 | ====================== Функция 21, подфункция 11 ===================== |
1290 | =========== Разрешить/запретить низкоуровневый доступ к HD. ========== |
1238 | =========== Разрешить/запретить низкоуровневый доступ к HD. ========== |
1291 | ====================================================================== |
1239 | ====================================================================== |
1292 | Параметры: |
1240 | Параметры: |
Line 1314... | Line 1262... | ||
1314 | * Используется при работе с шиной PCI (функция 62). |
1262 | * Используется при работе с шиной PCI (функция 62). |
1315 | * Текущая реализация использует только младший бит ecx. |
1263 | * Текущая реализация использует только младший бит ecx. |
1316 | * Получить текущее состояние можно вызовом подфункции 12 функции 26. |
1264 | * Получить текущее состояние можно вызовом подфункции 12 функции 26. |
Line 1317... | Line 1265... | ||
1317 | 1265 | ||
1318 | ====================================================================== |
- | |
1319 | ============= Функция 21, подфункция 13, подподфункция 1 ============= |
- | |
1320 | ==== Инициализировать + получить информацию о драйвере vmode.mdr. ==== |
- | |
1321 | ====================================================================== |
- | |
1322 | Параметры: |
- | |
1323 | * eax = 21 - номер функции |
- | |
1324 | * ebx = 13 - номер подфункции |
- | |
1325 | * ecx = 1 - номер функции драйвера |
- | |
1326 | * edx = указатель на буфер размера 512 байт |
- | |
1327 | Возвращаемое значение: |
- | |
1328 | * если драйвер не загружен (никогда не бывает в текущей реализации): |
- | |
1329 | * eax = -1 |
- | |
1330 | * ebx, ecx разрушаются |
- | |
1331 | * если драйвер загружен: |
- | |
1332 | * eax = 'MDAZ' (в стиле fasm'а, т.е. 'M' - младший байт, |
- | |
1333 | 'Z' - старший) - сигнатура |
- | |
1334 | * ebx = текущая частота развёртки (в Гц) |
- | |
1335 | * ecx разрушается |
- | |
1336 | * буфер, на который указывает edx, заполнен |
- | |
1337 | Формат буфера: |
- | |
1338 | * +0: 32*byte: имя драйвера, "Trans VideoDriver" (без кавычек, |
- | |
1339 | дополнено пробелами) |
- | |
1340 | * +32 = +0x20: dword: версия драйвера (версия x.y кодируется как |
- | |
1341 | y*65536+x), для текущей реализации 1 (1.0) |
- | |
1342 | * +36 = +0x24: 7*dword: зарезервировано (0 в текущей реализации) |
- | |
1343 | * +64 = +0x40: 32*word: список поддерживаемых видеорежимов (каждое |
- | |
1344 | слово - номер видеорежима, после собственно списка идут нули) |
- | |
1345 | * +128 = +0x80: 32*(5*word): список поддерживаемых частот развёрток |
- | |
1346 | для видеорежимов: для каждого видеорежима, указанного в предыдущем |
- | |
1347 | поле, указано до 5 поддерживаемых частот |
- | |
1348 | (в неиспользуемых позициях записаны нули) |
- | |
1349 | Замечания: |
- | |
1350 | * Функция инициализирует драйвер (если он ещё не инициализирован) |
- | |
1351 | и должна вызываться первой, перед остальными (иначе они будут |
- | |
1352 | возвращать -1, ничего не делая). |
- | |
1353 | * В текущей реализации поддерживается только одна частота развёртки |
- | |
1354 | на видеорежим. |
- | |
1355 | - | ||
1356 | ====================================================================== |
- | |
1357 | ============= Функция 21, подфункция 13, подподфункция 2 ============= |
- | |
1358 | ============= Получить информацию о текущем видеорежиме. ============= |
- | |
1359 | ====================================================================== |
- | |
1360 | Параметры: |
- | |
1361 | * eax = 21 - номер функции |
- | |
1362 | * ebx = 13 - номер подфункции |
- | |
1363 | * ecx = 2 - номер функции драйвера |
- | |
1364 | Возвращаемое значение: |
- | |
1365 | * eax = -1 - драйвер не загружен или не инициализирован; |
- | |
1366 | ebx,ecx разрушаются |
- | |
1367 | * eax = [ширина]*65536 + [высота] |
- | |
1368 | * ebx = частота вертикальной развёртки (в Гц) |
- | |
1369 | * ecx = номер текущего видеорежима |
- | |
1370 | Замечания: |
- | |
1371 | * Драйвер предварительно должен быть инициализирован вызовом |
- | |
1372 | функции драйвера 1. |
- | |
1373 | * Если нужны только размеры экрана, целесообразней использовать |
- | |
1374 | функцию 14 с учётом того, что она возвращает размеры на 1 меньше. |
- | |
1375 | - | ||
1376 | ====================================================================== |
- | |
1377 | = Функция 21, подфункция 13, подподфункция 3 - установить видеорежим. |
- | |
1378 | ====================================================================== |
- | |
1379 | Параметры: |
- | |
1380 | * eax = 21 - номер функции |
- | |
1381 | * ebx = 13 - номер подфункции |
- | |
1382 | * ecx = 3 - номер функции драйвера |
- | |
1383 | * edx = [частота развёртки]*65536 + [номер видеорежима] |
- | |
1384 | Возвращаемое значение: |
- | |
1385 | * eax = -1 - драйвер не загружен, не инициализирован или |
- | |
1386 | произошла ошибка |
- | |
1387 | * eax = 0 - успешно |
- | |
1388 | * ebx, ecx разрушаются |
- | |
1389 | Замечания: |
- | |
1390 | * Драйвер предварительно должен быть инициализирован вызовом |
- | |
1391 | функции драйвера 1. |
- | |
1392 | * Номер видеорежима и частота должны быть в таблице, возвращаемой |
- | |
1393 | функцией драйвера 1. |
- | |
1394 | - | ||
1395 | ====================================================================== |
- | |
1396 | ============= Функция 21, подфункция 13, подподфункция 4 ============= |
- | |
1397 | ================= Вернуться к начальному видеорежиму. ================ |
- | |
1398 | ====================================================================== |
- | |
1399 | Возвращает экран в видеорежим, установленный при загрузке системы. |
- | |
1400 | Параметры: |
- | |
1401 | * eax = 21 - номер функции |
- | |
1402 | * ebx = 13 - номер подфункции |
- | |
1403 | * ecx = 4 - номер функции драйвера |
- | |
1404 | Возвращаемое значение: |
- | |
1405 | * eax = -1 - драйвер не загружен или не инициализирован |
- | |
1406 | * eax = 0 - успешно |
- | |
1407 | * ebx, ecx разрушаются |
- | |
1408 | Замечания: |
- | |
1409 | * Драйвер предварительно должен быть инициализирован вызовом |
- | |
1410 | функции драйвера 1. |
- | |
1411 | - | ||
1412 | ====================================================================== |
- | |
1413 | ============= Функция 21, подфункция 13, подподфункция 5 ============= |
- | |
1414 | ======== Увеличить/уменьшить размер видимой области монитора. ======== |
- | |
1415 | ====================================================================== |
- | |
1416 | Параметры: |
- | |
1417 | * eax = 21 - номер функции |
- | |
1418 | * ebx = 13 - номер подфункции |
- | |
1419 | * ecx = 5 - номер функции драйвера |
- | |
1420 | * edx = 0/1 - уменьшить/увеличить размер по горизонтали |
- | |
1421 | на одну позицию |
- | |
1422 | * edx = 2/3 - в текущей реализации не поддерживается; планируется |
- | |
1423 | как уменьшение/увеличение размера по вертикали на одну позицию |
- | |
1424 | Возвращаемое значение: |
- | |
1425 | * eax = -1 - драйвер не загружен или не инициализирован |
- | |
1426 | * eax = 0 - успешно |
- | |
1427 | * ebx, ecx разрушаются |
- | |
1428 | Замечания: |
- | |
1429 | * Драйвер предварительно должен быть инициализирован вызовом |
- | |
1430 | функции драйвера 1. |
- | |
1431 | * Функция влияет только на физический размер изображения |
- | |
1432 | на мониторе; логический размер (число пикселей) не меняется. |
- | |
1433 | - | ||
1434 | ====================================================================== |
1266 | ====================================================================== |
1435 | ============ Функция 22 - установить системную дату/время. =========== |
1267 | ============ Функция 22 - установить системную дату/время. =========== |
1436 | ====================================================================== |
1268 | ====================================================================== |
1437 | Параметры: |
1269 | Параметры: |
1438 | * eax = 22 - номер функции |
1270 | * eax = 22 - номер функции |
Line 1492... | Line 1324... | ||
1492 | * При текущей реализации произойдёт немедленный возврат из функции |
1324 | * При текущей реализации произойдёт немедленный возврат из функции |
1493 | с eax=0, если сложение ebx с текущим значением счётчика времени |
1325 | с eax=0, если сложение ebx с текущим значением счётчика времени |
1494 | вызовет 32-битное переполнение. |
1326 | вызовет 32-битное переполнение. |
Line 1495... | Line 1327... | ||
1495 | 1327 | ||
1496 | ====================================================================== |
- | |
1497 | ======= Функция 24, подфункция 1 - начать проигрывать CD-audio. ====== |
- | |
1498 | ====================================================================== |
- | |
1499 | Параметры: |
- | |
1500 | * eax = 24 - номер функции |
- | |
1501 | * ebx = 1 - номер подфункции |
- | |
1502 | * ecx = 0x00FRSSMM, где |
- | |
1503 | * MM = начальная минута |
- | |
1504 | * SS = начальная секунда |
- | |
1505 | * FR = начальный фрейм |
- | |
1506 | Возвращаемое значение: |
- | |
1507 | * eax = 0 - успешно |
- | |
1508 | * eax = 1 - не определена база CD |
- | |
1509 | Замечания: |
- | |
1510 | * Предварительно нужно определить базовый порт CD вызовом |
- | |
1511 | подфункции 3 функции 21. |
- | |
1512 | * В секунде 75 фреймов, в минуте 60 секунд. |
- | |
1513 | * Функция асинхронна (возвращает управление, когда началось |
- | |
1514 | проигрывание). |
- | |
1515 | - | ||
1516 | ====================================================================== |
- | |
1517 | ===== Функция 24, подфункция 2 - получить информацию о дорожках. ===== |
- | |
1518 | ====================================================================== |
- | |
1519 | Параметры: |
- | |
1520 | * eax = 24 - номер функции |
- | |
1521 | * ebx = 2 - номер подфункции |
- | |
1522 | * ecx = указатель на буфер для таблицы |
- | |
1523 | (максимум 8*64h+4 байт=100 дорожек) |
- | |
1524 | Возвращаемое значение: |
- | |
1525 | * eax = 0 - успешно |
- | |
1526 | * eax = 1 - не определена база CD |
- | |
1527 | Замечания: |
- | |
1528 | * Формат таблицы с информацией о дорожках такой же, как и для |
- | |
1529 | ATAPI-CD команды 43h (READ TOC), обычной таблицы (подкоманда 00h). |
- | |
1530 | Адреса возвращаются в формате MSF. |
- | |
1531 | * Предварительно нужно определить базовый порт CD вызовом |
- | |
1532 | подфункции 3 функции 21. |
- | |
1533 | * Функция возвращает информацию только о не более чем 100 |
- | |
1534 | первых дорожках. В большинстве случаев этого достаточно. |
- | |
1535 | - | ||
1536 | ====================================================================== |
- | |
1537 | ==== Функция 24, подфункция 3 - остановить проигрываемое CD-audio. === |
- | |
1538 | ====================================================================== |
- | |
1539 | Параметры: |
- | |
1540 | * eax = 24 - номер функции |
- | |
1541 | * ebx = 1 - номер подфункции |
- | |
1542 | Возвращаемое значение: |
- | |
1543 | * eax = 0 - успешно |
- | |
1544 | * eax = 1 - не определена база CD |
- | |
1545 | Замечания: |
- | |
1546 | * Предварительно нужно определить базовый порт CD вызовом |
- | |
1547 | подфункции 3 функции 21. |
- | |
1548 | - | ||
1549 | ====================================================================== |
1328 | ====================================================================== |
1550 | ======= Функция 24, подфункция 4 - извлечь лоток привода диска. ====== |
1329 | ======= Функция 24, подфункция 4 - извлечь лоток привода диска. ====== |
1551 | ====================================================================== |
1330 | ====================================================================== |
1552 | Параметры: |
1331 | Параметры: |
1553 | * eax = 24 - номер функции |
1332 | * eax = 24 - номер функции |
1554 | * ebx = 4 - номер подфункции |
1333 | * ebx = 4 - номер подфункции |
1555 | * ecx = номер CD/DVD-диска |
1334 | * ecx = номер CD/DVD-диска |
- | 1335 | от 0=Primary Master до 3=Secondary Slave для первого IDE контр. |
|
- | 1336 | от 4=Primary Master до 7=Secondary Slave для второго IDE контр. |
|
1556 | (от 0=Primary Master до 3=Secondary Slave) |
1337 | от 8=Primary Master до 11=Secondary Slave для третьего IDE контр. |
1557 | Возвращаемое значение: |
1338 | Возвращаемое значение: |
1558 | * функция не возвращает значения |
1339 | * функция не возвращает значения |
1559 | Замечания: |
1340 | Замечания: |
1560 | * Функция поддерживается только для ATAPI-устройств (CD и DVD). |
1341 | * Функция поддерживается только для ATAPI-устройств (CD и DVD). |
Line 1569... | Line 1350... | ||
1569 | ====================================================================== |
1350 | ====================================================================== |
1570 | Параметры: |
1351 | Параметры: |
1571 | * eax = 24 - номер функции |
1352 | * eax = 24 - номер функции |
1572 | * ebx = 5 - номер подфункции |
1353 | * ebx = 5 - номер подфункции |
1573 | * ecx = номер CD/DVD-диска |
1354 | * ecx = номер CD/DVD-диска |
1574 | (от 0=Primary Master до 3=Secondary Slave) |
1355 | от 0=Primary Master до 3=Secondary Slave для первого IDE контр. |
- | 1356 | от 4=Primary Master до 7=Secondary Slave для второго IDE контр. |
|
- | 1357 | от 8=Primary Master до 11=Secondary Slave для третьего IDE контр. |
|
1575 | Возвращаемое значение: |
1358 | Возвращаемое значение: |
1576 | * функция не возвращает значения |
1359 | * функция не возвращает значения |
1577 | Замечания: |
1360 | Замечания: |
1578 | * Функция поддерживается только для ATAPI-устройств (CD и DVD). |
1361 | * Функция поддерживается только для ATAPI-устройств (CD и DVD). |
1579 | * Примером использования функции является приложение CD_tray. |
1362 | * Примером использования функции является приложение CD_tray. |
Line 1647... | Line 1430... | ||
1647 | соответствующую текущей стране иконку |
1430 | соответствующую текущей стране иконку |
1648 | (используя описываемую функцию). |
1431 | (используя описываемую функцию). |
1649 | * Приложение @panel переключает раскладки по запросу пользователя. |
1432 | * Приложение @panel переключает раскладки по запросу пользователя. |
Line 1650... | Line 1433... | ||
1650 | 1433 | ||
1651 | ====================================================================== |
- | |
1652 | ============ Функция 26, подфункция 3 - получить базу CD. ============ |
- | |
1653 | ====================================================================== |
- | |
1654 | Параметры: |
- | |
1655 | * eax = 26 - номер функции |
- | |
1656 | * ebx = 3 - номер подфункции |
- | |
1657 | Возвращаемое значение: |
- | |
1658 | * eax = база CD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3 |
- | |
1659 | Замечания: |
- | |
1660 | * База CD используется функцией 24. |
- | |
1661 | * Установить базу CD можно вызовом подфункции 3 функции 21. |
- | |
1662 | - | ||
1663 | ====================================================================== |
1434 | ====================================================================== |
1664 | ========== Функция 26, подфункция 5 - получить язык системы. ========= |
1435 | ========== Функция 26, подфункция 5 - получить язык системы. ========= |
1665 | ====================================================================== |
1436 | ====================================================================== |
1666 | Параметры: |
1437 | Параметры: |
1667 | * eax = 26 - номер функции |
1438 | * eax = 26 - номер функции |
Line 1673... | Line 1444... | ||
1673 | не используемая самим ядром, однако приложение @panel рисует |
1444 | не используемая самим ядром, однако приложение @panel рисует |
1674 | соответствующую иконку (используя описываемую функцию). |
1445 | соответствующую иконку (используя описываемую функцию). |
1675 | * Установить язык системы можно вызовом подфункции 5 функции 21. |
1446 | * Установить язык системы можно вызовом подфункции 5 функции 21. |
Line 1676... | Line 1447... | ||
1676 | 1447 | ||
1677 | ====================================================================== |
- | |
1678 | ============ Функция 26, подфункция 7 - получить базу HD. ============ |
- | |
1679 | ====================================================================== |
- | |
1680 | База HD нужна для определения, на какой жёсткий диск писать, при |
- | |
1681 | использовании устаревшего синтаксиса /HD в устаревшей функции 58; |
- | |
1682 | при использовании современного синтаксиса /HD0,/HD1,/HD2,/HD3 |
- | |
1683 | база устанавливается автоматически. |
- | |
1684 | Параметры: |
- | |
1685 | * eax = 26 - номер функции |
- | |
1686 | * ebx = 7 - номер подфункции |
- | |
1687 | Возвращаемое значение: |
- | |
1688 | * eax = база HD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3 |
- | |
1689 | Замечания: |
- | |
1690 | * Любое приложение в любой момент времени может изменить базу. |
- | |
1691 | * Установить базу можно вызовом подфункции 7 функции 21. |
- | |
1692 | * Получить используемый раздел жёсткого диска можно подфункцией 8. |
- | |
1693 | - | ||
1694 | ====================================================================== |
- | |
1695 | =========== Функция 26, подфункция 8 - получить раздел HD. =========== |
- | |
1696 | ====================================================================== |
- | |
1697 | Раздел HD нужен для определения, на какой раздел жёсткого диска |
- | |
1698 | писать, при использовании устаревшего синтаксиса /HD в устаревшей |
- | |
1699 | функции 58; при использовании современного синтаксиса |
- | |
1700 | /HD0,/HD1,/HD2,/HD3 база и раздел устанавливаются автоматически. |
- | |
1701 | Параметры: |
- | |
1702 | * eax = 26 - номер функции |
- | |
1703 | * ebx = 8 - номер подфункции |
- | |
1704 | Возвращаемое значение: |
- | |
1705 | * eax = раздел HD (считая с 1) |
- | |
1706 | Замечания: |
- | |
1707 | * Любое приложение в любой момент времени может изменить раздел. |
- | |
1708 | * Установить раздел можно вызовом подфункции 8 функции 21. |
- | |
1709 | * Узнать число разделов на жёстком диске можно вызовом |
- | |
1710 | подфункции 11 функции 18. |
- | |
1711 | * Получить используемую базу жёсткого диска можно подфункцией 7. |
- | |
1712 | - | ||
1713 | ====================================================================== |
1448 | ====================================================================== |
1714 | === Функция 26, подфункция 9 - получить значение счётчика времени. === |
1449 | === Функция 26, подфункция 9 - получить значение счётчика времени. === |
1715 | ====================================================================== |
1450 | ====================================================================== |
1716 | Параметры: |
1451 | Параметры: |
1717 | * eax = 26 - номер функции |
1452 | * eax = 26 - номер функции |
Line 2542... | Line 2277... | ||
2542 | например, в http://alpha1.dyns.net/files/PCI/bios21.pdf. |
2277 | например, в http://alpha1.dyns.net/files/PCI/bios21.pdf. |
2543 | * Если BIOS не поддерживает это расширение, поведение функции |
2278 | * Если BIOS не поддерживает это расширение, поведение функции |
2544 | эмулируется (через аналоги подфункций функции 62 режима ядра). |
2279 | эмулируется (через аналоги подфункций функции 62 режима ядра). |
Line 2545... | Line 2280... | ||
2545 | 2280 | ||
2546 | ====================================================================== |
- | |
2547 | ============== Функция 58 - работа с файловой системой. ============== |
- | |
2548 | ====================================================================== |
- | |
2549 | Параметры: |
- | |
2550 | * eax = 58 |
- | |
2551 | * ebx = указатель на информационную структуру |
- | |
2552 | Возвращаемое значение: |
- | |
2553 | * eax = 0 - успешно; иначе код ошибки файловой системы |
- | |
2554 | * в зависимости от подфункции может возвращаться значение и |
- | |
2555 | в других регистрах |
- | |
2556 | Общий формат информационной структуры: |
- | |
2557 | * +0: dword: номер подфункции |
- | |
2558 | * +4: dword: номер блока |
- | |
2559 | * +8: dword: размер |
- | |
2560 | * +12 = +0xC: dword: указатель на данные |
- | |
2561 | * +16 = +0x10: dword: указатель на память для работы системы |
- | |
2562 | (4096 байт) |
- | |
2563 | * +20 = +0x14: n db: ASCIIZ-строка с именем файла |
- | |
2564 | Уточнения - в документации на соответствующую подфункцию. |
- | |
2565 | Имя файла нечувствительно к регистру латинских букв, |
- | |
2566 | русские буквы должны быть заглавными. |
- | |
2567 | Формат имени файла: |
- | |
2568 | /base/number/dir1/dir2/.../dirn/file, |
- | |
2569 | где /base/number идентифицирует устройство, на котором ищется файл: |
- | |
2570 | одно из |
- | |
2571 | * /RD/1 = /RAMDISK/1 для доступа к рамдиску |
- | |
2572 | * /FD/1 = /FLOPPYDISK/1 для доступа к первому флоппи-дисководу, |
- | |
2573 | /FD/2 = /FLOPPYDISK/2 для второго флоппи-дисковода |
- | |
2574 | * /HD/x = /HARDDISK/x - устаревший вариант доступа к жёсткому диску |
- | |
2575 | (в этом случае база определяется подфункцией 7 функции 21), |
- | |
2576 | x - номер раздела (считая с 1) |
- | |
2577 | * /HD0/x, /HD1/x, /HD2/x, /HD3/x для доступа соответственно |
- | |
2578 | к устройствам IDE0 (Primary Master), IDE1 (Primary Slave), |
- | |
2579 | IDE2 (Secondary Master), IDE3 (Secondary Slave); |
- | |
2580 | x - номер раздела на выбранном винчестере, изменяется от 1 до 255 |
- | |
2581 | (на каждом из винчестеров нумерация начинается с 1) |
- | |
2582 | Замечания: |
- | |
2583 | * В первых двух случаях допускается использование FIRST вместо 1, |
- | |
2584 | SECOND вместо 2, но использовать эту возможность |
- | |
2585 | не рекомендуется для удобства перехода на будущие расширения. |
- | |
2586 | * Накладывается ограничение n<=39. |
- | |
2587 | * Имена папок и файла dir1,...,dirn,file должны быть в формате 8.3: |
- | |
2588 | имя не более 8 символов, точка, расширение не более 3 символов. |
- | |
2589 | Хвостовые пробелы игнорируются. Других пробелов быть не должно. |
- | |
2590 | Если имя занимает ровно 8 символов, точку можно опустить |
- | |
2591 | (хотя пользоваться этим не рекомендуется для удобства перехода |
- | |
2592 | на будущие расширения). |
- | |
2593 | * Функция не поддерживает папок на рамдиске. |
- | |
2594 | Примеры: |
- | |
2595 | * '/RAMDISK/FIRST/KERNEL.ASM',0 |
- | |
2596 | '/rd/1/kernel.asm',0 |
- | |
2597 | * '/HD0/1/kernel.asm',0 |
- | |
2598 | * '/hd0/1/menuet/pics/tanzania.bmp',0 |
- | |
2599 | Доступные подфункции: |
- | |
2600 | * подфункция 0 - чтение файла/папки |
- | |
2601 | * подфункция 8 - LBA-чтение с устройства |
- | |
2602 | * подфункция 15 - получение информации о файловой системе |
- | |
2603 | - | ||
2604 | ====================================================================== |
- | |
2605 | ========== Функция 58, подфункция 0 - прочитать файл/папку. ========== |
- | |
2606 | ====================================================================== |
- | |
2607 | Параметры: |
- | |
2608 | * eax = 58 |
- | |
2609 | * ebx = указатель на информационную структуру |
- | |
2610 | Формат информационной структуры: |
- | |
2611 | * +0: dword: 0 = номер подфункции |
- | |
2612 | * +4: dword: номер блока для чтения (считая с 0) |
- | |
2613 | * +8: dword: число блоков для чтения |
- | |
2614 | * +12 = +0xC: dword: указатель на буфер, куда будут записаны данные |
- | |
2615 | * +16 = +0x10: dword: указатель на буфер для работы системы |
- | |
2616 | (4096 байт) |
- | |
2617 | * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в |
- | |
2618 | общем описании |
- | |
2619 | Возвращаемое значение: |
- | |
2620 | * eax = 0 - успешно, иначе код ошибки файловой системы |
- | |
2621 | * ebx = размер файла (в байтах) или |
- | |
2622 | -1=0xffffffff, если файл не найден |
- | |
2623 | Замечания: |
- | |
2624 | * Размер блока - 512 байт. |
- | |
2625 | * Эта функция устарела, для чтения файлов используйте подфункцию 0 |
- | |
2626 | функции 70, для чтения папок - подфункцию 1 функции 70. |
- | |
2627 | * Функция позволяет читать содержимое папки. Из файловых систем |
- | |
2628 | поддерживается только FAT. Формат FAT-папки описан в любой |
- | |
2629 | документации по FAT. |
- | |
2630 | * Размер папки определяется по размеру цепочки кластеров в FAT. |
- | |
2631 | * Если файл кончился раньше, чем был прочитан последний запрошенный |
- | |
2632 | блок, то функция прочитает, сколько сможет, после чего вернёт |
- | |
2633 | eax=6 (EOF). |
- | |
2634 | * Функция позволяет читать корневые папки /rd/1,/fd/x,/hd[n]/x, но |
- | |
2635 | в первых двух случаях текущая реализация не следует |
- | |
2636 | установленным правилам: |
- | |
2637 | для /rd/1: |
- | |
2638 | * если указано 0 блоков для чтения, считается, |
- | |
2639 | что запрашивается 1; |
- | |
2640 | * если запрашивается больше 14 блоков или начальный блок |
- | |
2641 | не меньше 14-го, то возвращается eax=5 (not found) и ebx=-1; |
- | |
2642 | * размер корневого каталога рамдиска = 14 блоков, |
- | |
2643 | 0x1C00=7168 байт; но возвращается ebx=0 |
- | |
2644 | (за исключением случая предыдущего пункта); |
- | |
2645 | * как ни странно, можно прочитать 14-й блок (там, вообще говоря, |
- | |
2646 | мусор - напоминаю, счёт ведётся с 0); |
- | |
2647 | * если был запрошен хотя бы один блок с номером, не меньшим 14, |
- | |
2648 | то возвращается eax=6(EOF); иначе eax=0. |
- | |
2649 | Для /fd/x: |
- | |
2650 | * если начальный блок не меньше 14-го, то возвращается |
- | |
2651 | eax=5 (not found) и ebx=0; |
- | |
2652 | * кстати говоря, формат FAT12 допускает дискеты с размером |
- | |
2653 | корневого каталога меньше или больше 14 блоков; |
- | |
2654 | * проверки длины не делается; |
- | |
2655 | * если удалось прочитать данные с дискеты, возвращается |
- | |
2656 | eax=0,ebx=0; в противном случае eax=10 (access denied), ebx=-1. |
- | |
2657 | * Функция обрабатывает чтение специальных папок /,/rd,/fd,/hd[n]; |
- | |
2658 | но результат не соответствует ожидаемому |
- | |
2659 | (по работе с обычными файлами/папками), не следует установленным |
- | |
2660 | правилам, может измениться в следующих версиях ядра и потому |
- | |
2661 | не описывается. Для получения информации об оборудовании |
- | |
2662 | используйте подфункцию 11 функции 18 или |
- | |
2663 | читайте соответствующие папки подфункцией 1 функции 70. |
- | |
2664 | - | ||
2665 | ====================================================================== |
- | |
2666 | ========= Функция 58, подфункция 8 - LBA-чтение с устройства. ======== |
- | |
2667 | ====================================================================== |
- | |
2668 | Параметры: |
- | |
2669 | * eax = 58 - номер функции |
- | |
2670 | * ebx = указатель на информационную структуру |
- | |
2671 | Формат информационной структуры: |
- | |
2672 | * +0: dword: 8 = номер подфункции |
- | |
2673 | * +4: dword: номер блока для чтения (считая с 0) |
- | |
2674 | * +8: dword: игнорируется (устанавливайте в 1) |
- | |
2675 | * +12 = +0xC: dword: указатель на буфер, куда будут записаны данные |
- | |
2676 | (512 байт) |
- | |
2677 | * +16 = +0x10: dword: указатель на буфер для работы системы |
- | |
2678 | (4096 байт) |
- | |
2679 | * +20 = +0x14: ASCIIZ-имя устройства: нечувствительно к регистру, |
- | |
2680 | одно из /rd/1 = /RamDisk/1, /hd/n = /HardDisk/n, |
- | |
2681 | 1<=n<=4 - номер устройства: 1=IDE0, ..., 4=IDE3. |
- | |
2682 | Вместо цифр допускается, хотя и не рекомендуется для удобства |
- | |
2683 | перехода на будущие расширения, |
- | |
2684 | использование 'first','second','third','fourth'. |
- | |
2685 | Возвращаемое значение: |
- | |
2686 | * если указано имя устройства /hd/xxx, где xxx не находится |
- | |
2687 | в списке выше: |
- | |
2688 | * eax = ebx = 1 |
- | |
2689 | * если указано неправильное имя устройства |
- | |
2690 | (за исключением предыдущего случая): |
- | |
2691 | * eax = 5 |
- | |
2692 | * ebx не меняется |
- | |
2693 | * если LBA-доступ запрещён подфункцией 11 функции 21: |
- | |
2694 | * eax = 2 |
- | |
2695 | * ebx разрушается |
- | |
2696 | * для рамдиска: попытка чтения блока за пределами рамдиска |
- | |
2697 | (18*2*80 блоков) приводит к |
- | |
2698 | * eax = 3 |
- | |
2699 | * ebx = 0 |
- | |
2700 | * при успешном чтении: |
- | |
2701 | * eax = ebx = 0 |
- | |
2702 | Замечания: |
- | |
2703 | * Размер блока - 512 байт; читается один блок. |
- | |
2704 | * Не следует полагаться на возвращаемое значение, |
- | |
2705 | оно может измениться в следующих версиях. |
- | |
2706 | * Требуется, чтобы был разрешён LBA-доступ к устройствам |
- | |
2707 | подфункцией 11 функции 21. Узнать это можно вызовом |
- | |
2708 | подфункцией 11 функции 26. |
- | |
2709 | * LBA-чтение дискеты не поддерживается. |
- | |
2710 | * Функция считывает данные физического жёсткого диска; |
- | |
2711 | если по каким-то причинам нужны данные конкретного раздела, |
- | |
2712 | придётся определять начальный сектор этого раздела |
- | |
2713 | (либо напрямую через MBR, либо из расширенной структуры, |
- | |
2714 | возвращаемой той же подфункцией 11 функции 18). |
- | |
2715 | * Функция не проверяет код ошибки жёсткого диска, так что запрос |
- | |
2716 | несуществующего сектора всё равно что-то прочитает |
- | |
2717 | (вероятнее всего, нули, но это определяется устройством) и |
- | |
2718 | это будет считаться успехом (eax=0). |
- | |
2719 | - | ||
2720 | ====================================================================== |
- | |
2721 | = Функция 58, подфункция 15 - получить информацию о файловой системе. |
- | |
2722 | ====================================================================== |
- | |
2723 | Параметры: |
- | |
2724 | * eax = 58 - номер функции |
- | |
2725 | * ebx = указатель на информационную структуру |
- | |
2726 | Формат информационной структуры: |
- | |
2727 | * +0: dword: 15 = номер подфункции |
- | |
2728 | * +4: dword: игнорируется |
- | |
2729 | * +8: dword: игнорируется |
- | |
2730 | * +12 = +0xC: dword: игнорируется |
- | |
2731 | * +16 = +0x10: dword: игнорируется |
- | |
2732 | * +20 = +0x14: (проверяется только второй символ, сразу после слэша) |
- | |
2733 | /rd=/RAMDISK или /hd=/HARDDISK |
- | |
2734 | Возвращаемое значение: |
- | |
2735 | * если второй символ не принадлежит множеству {'r','R','h','H'}: |
- | |
2736 | * eax = 3 |
- | |
2737 | * ebx = ecx = dword [fileinfo] = 0 |
- | |
2738 | * для рамдиска: |
- | |
2739 | * eax = 0 (успех) |
- | |
2740 | * ebx = общее число кластеров = 2847 |
- | |
2741 | * ecx = число свободных кластеров |
- | |
2742 | * dword [fileinfo] = размер кластера = 512 |
- | |
2743 | * для жёсткого диска: база и раздел определяются подфункциями 7 и 8 |
- | |
2744 | функции 21: |
- | |
2745 | * eax = 0 (успех) |
- | |
2746 | * ebx = общее число кластеров |
- | |
2747 | * ecx = число свободных кластеров |
- | |
2748 | * dword [fileinfo] = размер кластера (в байтах) |
- | |
2749 | Замечания: |
- | |
2750 | * Не удивляйтесь странному расположению 4-го возвращаемого |
- | |
2751 | параметра - когда писался этот код, при системных вызовах |
- | |
2752 | приложению возвращались только регистры eax,ebx,ecx (из |
- | |
2753 | pushad-структуры, передающейся как аргумент системной функции). |
- | |
2754 | Теперь это исправлено, так что, возможно, имеет смысл возвращать |
- | |
2755 | размер кластера в edx, пока эту функцию не начали использовать. |
- | |
2756 | * Вообще-то ещё существует подфункция 11 функции 18, возвращающая |
- | |
2757 | информацию о файловой системе. По расширенной таблице дисковой |
- | |
2758 | подсистемы можно определить размер кластера (там он хранится |
- | |
2759 | в секторах) и общее число кластеров для жёстких дисков. |
- | |
2760 | - | ||
2761 | ====================================================================== |
2281 | ====================================================================== |
2762 | =========== Функция 60 - Inter Process Communication (IPC). ========== |
2282 | =========== Функция 60 - Inter Process Communication (IPC). ========== |
2763 | ====================================================================== |
2283 | ====================================================================== |
2764 | IPC применяется для посылок сообщений от одного процесса/потока |
2284 | IPC применяется для посылок сообщений от одного процесса/потока |
2765 | другому. При этом следует предварительно договориться о том, как |
2285 | другому. При этом следует предварительно договориться о том, как |
Line 4542... | Line 4062... | ||
4542 | * eax = 75 - номер функции |
4062 | * eax = 75 - номер функции |
4543 | * bl = 10 - номер подфункции |
4063 | * bl = 10 - номер подфункции |
4544 | Возвращаемое значение: |
4064 | Возвращаемое значение: |
4545 | * eax = socketnum1, -1 для ошибки |
4065 | * eax = socketnum1, -1 для ошибки |
4546 | * ebx = socketnum2, код ошибки в случае ошибки |
4066 | * ebx = socketnum2, код ошибки в случае ошибки |
4547 | Замечания: |
- | |
4548 | - | ||
4549 | Optstruct: dd level |
- | |
4550 | dd optionname |
- | |
4551 | dd optlength |
- | |
4552 | db options... |
- | |
Line 4553... | Line 4067... | ||
4553 | 4067 | ||
4554 | ====================================================================== |
4068 | ====================================================================== |
4555 | ========== Функция -1 - завершить выполнение потока/процесса ========= |
4069 | ========== Функция -1 - завершить выполнение потока/процесса ========= |
4556 | ====================================================================== |
4070 | ====================================================================== |