Subversion Repositories Kolibri OS

Rev

Rev 4572 | Rev 4588 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4572 Rev 4573
Line 814... Line 814...
814
Замечания:
814
Замечания:
815
  * Не следует полагаться на возвращаемое значение при неверном
815
  * Не следует полагаться на возвращаемое значение при неверном
816
    вызове, оно может измениться в последующих версиях ядра.
816
    вызове, оно может измениться в последующих версиях ядра.
Line 817... Line 817...
817
 
817
 
818
======================================================================
818
======================================================================
819
======== Функция 18, подфункция 10 - свернуть окно приложения. =======
819
========= Функция 18, подфункция 10 - свернуть активное окно. ========
820
======================================================================
820
======================================================================
821
Сворачивает собственное окно.
821
Сворачивает активное окно.
822
Параметры:
822
Параметры:
823
  * eax = 18 - номер функции
823
  * eax = 18 - номер функции
824
  * ebx = 10 - номер подфункции
824
  * ebx = 10 - номер подфункции
825
Возвращаемое значение:
825
Возвращаемое значение:
Line 1238... Line 1238...
1238
  * Проверок на корректность не делается, поскольку ядро эту
1238
  * Проверок на корректность не делается, поскольку ядро эту
1239
    переменную не использует.
1239
    переменную не использует.
1240
  * Получить язык системы можно вызовом подфункции 5 функции 26.
1240
  * Получить язык системы можно вызовом подфункции 5 функции 26.
Line 1241... Line 1241...
1241
 
1241
 
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
======================================================================
1242
======================================================================
1289
====================== Функция 21, подфункция 11 =====================
1243
====================== Функция 21, подфункция 11 =====================
1290
=========== Разрешить/запретить низкоуровневый доступ к HD. ==========
1244
=========== Разрешить/запретить низкоуровневый доступ к HD. ==========
1291
======================================================================
1245
======================================================================
1292
Параметры:
1246
Параметры:
Line 1673... Line 1627...
1673
    не используемая самим ядром, однако приложение @panel рисует
1627
    не используемая самим ядром, однако приложение @panel рисует
1674
    соответствующую иконку (используя описываемую функцию).
1628
    соответствующую иконку (используя описываемую функцию).
1675
  * Установить язык системы можно вызовом подфункции 5 функции 21.
1629
  * Установить язык системы можно вызовом подфункции 5 функции 21.
Line 1676... Line 1630...
1676
 
1630
 
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
======================================================================
1631
======================================================================
1714
=== Функция 26, подфункция 9 - получить значение счётчика времени. ===
1632
=== Функция 26, подфункция 9 - получить значение счётчика времени. ===
1715
======================================================================
1633
======================================================================
1716
Параметры:
1634
Параметры:
1717
  * eax = 26 - номер функции
1635
  * eax = 26 - номер функции
Line 2542... Line 2460...
2542
    например, в http://alpha1.dyns.net/files/PCI/bios21.pdf.
2460
    например, в http://alpha1.dyns.net/files/PCI/bios21.pdf.
2543
  * Если BIOS не поддерживает это расширение, поведение функции
2461
  * Если BIOS не поддерживает это расширение, поведение функции
2544
    эмулируется (через аналоги подфункций функции 62 режима ядра).
2462
    эмулируется (через аналоги подфункций функции 62 режима ядра).
Line 2545... Line 2463...
2545
 
2463
 
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
======================================================================
2464
======================================================================
2762
=========== Функция 60 - Inter Process Communication (IPC). ==========
2465
=========== Функция 60 - Inter Process Communication (IPC). ==========
2763
======================================================================
2466
======================================================================
2764
IPC применяется для посылок сообщений от одного процесса/потока
2467
IPC применяется для посылок сообщений от одного процесса/потока
2765
другому. При этом следует предварительно договориться о том, как
2468
другому. При этом следует предварительно договориться о том, как