Subversion Repositories Kolibri OS

Rev

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
======================================================================