forked from KolibriOS/kolibrios
actualize documentation
git-svn-id: svn://kolibrios.org@4573 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
74329e061f
commit
f406933a83
@ -462,8 +462,6 @@ cdid rd 1
|
|||||||
hdbase rd 1 ; for boot 0x1f0
|
hdbase rd 1 ; for boot 0x1f0
|
||||||
hdid rd 1
|
hdid rd 1
|
||||||
hdpos rd 1 ; for boot 0x1
|
hdpos rd 1 ; for boot 0x1
|
||||||
label known_part dword
|
|
||||||
fat32part rd 1 ; for boot 0x1
|
|
||||||
cdpos rd 1
|
cdpos rd 1
|
||||||
|
|
||||||
;CPUID information
|
;CPUID information
|
||||||
|
@ -816,9 +816,9 @@
|
|||||||
вызове, оно может измениться в последующих версиях ядра.
|
вызове, оно может измениться в последующих версиях ядра.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
======== Функция 18, подфункция 10 - свернуть окно приложения. =======
|
========= Функция 18, подфункция 10 - свернуть активное окно. ========
|
||||||
======================================================================
|
======================================================================
|
||||||
Сворачивает собственное окно.
|
Сворачивает активное окно.
|
||||||
Параметры:
|
Параметры:
|
||||||
* eax = 18 - номер функции
|
* eax = 18 - номер функции
|
||||||
* ebx = 10 - номер подфункции
|
* ebx = 10 - номер подфункции
|
||||||
@ -1239,52 +1239,6 @@ dd 1675
|
|||||||
переменную не использует.
|
переменную не использует.
|
||||||
* Получить язык системы можно вызовом подфункции 5 функции 26.
|
* Получить язык системы можно вызовом подфункции 5 функции 26.
|
||||||
|
|
||||||
======================================================================
|
|
||||||
=========== Функция 21, подфункция 7 - установить базу HD. ===========
|
|
||||||
======================================================================
|
|
||||||
База HD нужна для определения, на какой жёсткий диск писать, при
|
|
||||||
использовании устаревшего синтаксиса /HD в устаревшей функции 58;
|
|
||||||
при использовании современного синтаксиса /HD0,/HD1,/HD2,/HD3
|
|
||||||
база устанавливается автоматически.
|
|
||||||
Параметры:
|
|
||||||
* eax = 21 - номер функции
|
|
||||||
* ebx = 7 - номер подфункции
|
|
||||||
* ecx = база HD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
|
|
||||||
Возвращаемое значение:
|
|
||||||
* eax = 0
|
|
||||||
Замечания:
|
|
||||||
* Любое приложение в любой момент времени может изменить базу.
|
|
||||||
* Не следует изменять базу, когда какое-нибудь приложение работает
|
|
||||||
с жёстким диском. Если не хотите глюков системы.
|
|
||||||
* Получить установленную базу можно вызовом подфункции 7 функции 26.
|
|
||||||
* Следует также определить используемый раздел жёсткого диска
|
|
||||||
подфункцией 8.
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
========== Функция 21, подфункция 8 - установить раздел HD. ==========
|
|
||||||
======================================================================
|
|
||||||
Раздел HD нужен для определения, на какой раздел жёсткого диска
|
|
||||||
писать, при использовании устаревшего синтаксиса /HD в устаревшей
|
|
||||||
функции 58; при использовании современного синтаксиса
|
|
||||||
/HD0,/HD1,/HD2,/HD3 база и раздел устанавливаются автоматически.
|
|
||||||
Параметры:
|
|
||||||
* eax = 21 - номер функции
|
|
||||||
* ebx = 8 - номер подфункции
|
|
||||||
* ecx = раздел HD (считая с 1)
|
|
||||||
Возвращаемое значение:
|
|
||||||
* eax = 0
|
|
||||||
Замечания:
|
|
||||||
* Любое приложение в любой момент времени может изменить раздел.
|
|
||||||
* Не следует изменять раздел, когда какое-нибудь приложение работает
|
|
||||||
с жёстким диском. Если не хотите глюков системы.
|
|
||||||
* Получить установленный раздел можно вызовом подфункции 8
|
|
||||||
функции 26.
|
|
||||||
* Проверок на корректность не делается.
|
|
||||||
* Узнать число разделов на жёстком диске можно вызовом
|
|
||||||
подфункции 11 функции 18.
|
|
||||||
* Следует также определить используемую базу жёсткого диска
|
|
||||||
подфункцией 7.
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
====================== Функция 21, подфункция 11 =====================
|
====================== Функция 21, подфункция 11 =====================
|
||||||
=========== Разрешить/запретить низкоуровневый доступ к HD. ==========
|
=========== Разрешить/запретить низкоуровневый доступ к HD. ==========
|
||||||
@ -1674,42 +1628,6 @@ dd 1675
|
|||||||
соответствующую иконку (используя описываемую функцию).
|
соответствующую иконку (используя описываемую функцию).
|
||||||
* Установить язык системы можно вызовом подфункции 5 функции 21.
|
* Установить язык системы можно вызовом подфункции 5 функции 21.
|
||||||
|
|
||||||
======================================================================
|
|
||||||
============ Функция 26, подфункция 7 - получить базу HD. ============
|
|
||||||
======================================================================
|
|
||||||
База HD нужна для определения, на какой жёсткий диск писать, при
|
|
||||||
использовании устаревшего синтаксиса /HD в устаревшей функции 58;
|
|
||||||
при использовании современного синтаксиса /HD0,/HD1,/HD2,/HD3
|
|
||||||
база устанавливается автоматически.
|
|
||||||
Параметры:
|
|
||||||
* eax = 26 - номер функции
|
|
||||||
* ebx = 7 - номер подфункции
|
|
||||||
Возвращаемое значение:
|
|
||||||
* eax = база HD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
|
|
||||||
Замечания:
|
|
||||||
* Любое приложение в любой момент времени может изменить базу.
|
|
||||||
* Установить базу можно вызовом подфункции 7 функции 21.
|
|
||||||
* Получить используемый раздел жёсткого диска можно подфункцией 8.
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
=========== Функция 26, подфункция 8 - получить раздел HD. ===========
|
|
||||||
======================================================================
|
|
||||||
Раздел HD нужен для определения, на какой раздел жёсткого диска
|
|
||||||
писать, при использовании устаревшего синтаксиса /HD в устаревшей
|
|
||||||
функции 58; при использовании современного синтаксиса
|
|
||||||
/HD0,/HD1,/HD2,/HD3 база и раздел устанавливаются автоматически.
|
|
||||||
Параметры:
|
|
||||||
* eax = 26 - номер функции
|
|
||||||
* ebx = 8 - номер подфункции
|
|
||||||
Возвращаемое значение:
|
|
||||||
* eax = раздел HD (считая с 1)
|
|
||||||
Замечания:
|
|
||||||
* Любое приложение в любой момент времени может изменить раздел.
|
|
||||||
* Установить раздел можно вызовом подфункции 8 функции 21.
|
|
||||||
* Узнать число разделов на жёстком диске можно вызовом
|
|
||||||
подфункции 11 функции 18.
|
|
||||||
* Получить используемую базу жёсткого диска можно подфункцией 7.
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
=== Функция 26, подфункция 9 - получить значение счётчика времени. ===
|
=== Функция 26, подфункция 9 - получить значение счётчика времени. ===
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -2543,221 +2461,6 @@ dword-значение цвета 0x00RRGGBB
|
|||||||
* Если BIOS не поддерживает это расширение, поведение функции
|
* Если BIOS не поддерживает это расширение, поведение функции
|
||||||
эмулируется (через аналоги подфункций функции 62 режима ядра).
|
эмулируется (через аналоги подфункций функции 62 режима ядра).
|
||||||
|
|
||||||
======================================================================
|
|
||||||
============== Функция 58 - работа с файловой системой. ==============
|
|
||||||
======================================================================
|
|
||||||
Параметры:
|
|
||||||
* eax = 58
|
|
||||||
* ebx = указатель на информационную структуру
|
|
||||||
Возвращаемое значение:
|
|
||||||
* eax = 0 - успешно; иначе код ошибки файловой системы
|
|
||||||
* в зависимости от подфункции может возвращаться значение и
|
|
||||||
в других регистрах
|
|
||||||
Общий формат информационной структуры:
|
|
||||||
* +0: dword: номер подфункции
|
|
||||||
* +4: dword: номер блока
|
|
||||||
* +8: dword: размер
|
|
||||||
* +12 = +0xC: dword: указатель на данные
|
|
||||||
* +16 = +0x10: dword: указатель на память для работы системы
|
|
||||||
(4096 байт)
|
|
||||||
* +20 = +0x14: n db: ASCIIZ-строка с именем файла
|
|
||||||
Уточнения - в документации на соответствующую подфункцию.
|
|
||||||
Имя файла нечувствительно к регистру латинских букв,
|
|
||||||
русские буквы должны быть заглавными.
|
|
||||||
Формат имени файла:
|
|
||||||
/base/number/dir1/dir2/.../dirn/file,
|
|
||||||
где /base/number идентифицирует устройство, на котором ищется файл:
|
|
||||||
одно из
|
|
||||||
* /RD/1 = /RAMDISK/1 для доступа к рамдиску
|
|
||||||
* /FD/1 = /FLOPPYDISK/1 для доступа к первому флоппи-дисководу,
|
|
||||||
/FD/2 = /FLOPPYDISK/2 для второго флоппи-дисковода
|
|
||||||
* /HD/x = /HARDDISK/x - устаревший вариант доступа к жёсткому диску
|
|
||||||
(в этом случае база определяется подфункцией 7 функции 21),
|
|
||||||
x - номер раздела (считая с 1)
|
|
||||||
* /HD0/x, /HD1/x, /HD2/x, /HD3/x для доступа соответственно
|
|
||||||
к устройствам IDE0 (Primary Master), IDE1 (Primary Slave),
|
|
||||||
IDE2 (Secondary Master), IDE3 (Secondary Slave);
|
|
||||||
x - номер раздела на выбранном винчестере, изменяется от 1 до 255
|
|
||||||
(на каждом из винчестеров нумерация начинается с 1)
|
|
||||||
Замечания:
|
|
||||||
* В первых двух случаях допускается использование FIRST вместо 1,
|
|
||||||
SECOND вместо 2, но использовать эту возможность
|
|
||||||
не рекомендуется для удобства перехода на будущие расширения.
|
|
||||||
* Накладывается ограничение n<=39.
|
|
||||||
* Имена папок и файла dir1,...,dirn,file должны быть в формате 8.3:
|
|
||||||
имя не более 8 символов, точка, расширение не более 3 символов.
|
|
||||||
Хвостовые пробелы игнорируются. Других пробелов быть не должно.
|
|
||||||
Если имя занимает ровно 8 символов, точку можно опустить
|
|
||||||
(хотя пользоваться этим не рекомендуется для удобства перехода
|
|
||||||
на будущие расширения).
|
|
||||||
* Функция не поддерживает папок на рамдиске.
|
|
||||||
Примеры:
|
|
||||||
* '/RAMDISK/FIRST/KERNEL.ASM',0
|
|
||||||
'/rd/1/kernel.asm',0
|
|
||||||
* '/HD0/1/kernel.asm',0
|
|
||||||
* '/hd0/1/menuet/pics/tanzania.bmp',0
|
|
||||||
Доступные подфункции:
|
|
||||||
* подфункция 0 - чтение файла/папки
|
|
||||||
* подфункция 8 - LBA-чтение с устройства
|
|
||||||
* подфункция 15 - получение информации о файловой системе
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
========== Функция 58, подфункция 0 - прочитать файл/папку. ==========
|
|
||||||
======================================================================
|
|
||||||
Параметры:
|
|
||||||
* eax = 58
|
|
||||||
* ebx = указатель на информационную структуру
|
|
||||||
Формат информационной структуры:
|
|
||||||
* +0: dword: 0 = номер подфункции
|
|
||||||
* +4: dword: номер блока для чтения (считая с 0)
|
|
||||||
* +8: dword: число блоков для чтения
|
|
||||||
* +12 = +0xC: dword: указатель на буфер, куда будут записаны данные
|
|
||||||
* +16 = +0x10: dword: указатель на буфер для работы системы
|
|
||||||
(4096 байт)
|
|
||||||
* +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в
|
|
||||||
общем описании
|
|
||||||
Возвращаемое значение:
|
|
||||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
|
||||||
* ebx = размер файла (в байтах) или
|
|
||||||
-1=0xffffffff, если файл не найден
|
|
||||||
Замечания:
|
|
||||||
* Размер блока - 512 байт.
|
|
||||||
* Эта функция устарела, для чтения файлов используйте подфункцию 0
|
|
||||||
функции 70, для чтения папок - подфункцию 1 функции 70.
|
|
||||||
* Функция позволяет читать содержимое папки. Из файловых систем
|
|
||||||
поддерживается только FAT. Формат FAT-папки описан в любой
|
|
||||||
документации по FAT.
|
|
||||||
* Размер папки определяется по размеру цепочки кластеров в FAT.
|
|
||||||
* Если файл кончился раньше, чем был прочитан последний запрошенный
|
|
||||||
блок, то функция прочитает, сколько сможет, после чего вернёт
|
|
||||||
eax=6 (EOF).
|
|
||||||
* Функция позволяет читать корневые папки /rd/1,/fd/x,/hd[n]/x, но
|
|
||||||
в первых двух случаях текущая реализация не следует
|
|
||||||
установленным правилам:
|
|
||||||
для /rd/1:
|
|
||||||
* если указано 0 блоков для чтения, считается,
|
|
||||||
что запрашивается 1;
|
|
||||||
* если запрашивается больше 14 блоков или начальный блок
|
|
||||||
не меньше 14-го, то возвращается eax=5 (not found) и ebx=-1;
|
|
||||||
* размер корневого каталога рамдиска = 14 блоков,
|
|
||||||
0x1C00=7168 байт; но возвращается ebx=0
|
|
||||||
(за исключением случая предыдущего пункта);
|
|
||||||
* как ни странно, можно прочитать 14-й блок (там, вообще говоря,
|
|
||||||
мусор - напоминаю, счёт ведётся с 0);
|
|
||||||
* если был запрошен хотя бы один блок с номером, не меньшим 14,
|
|
||||||
то возвращается eax=6(EOF); иначе eax=0.
|
|
||||||
Для /fd/x:
|
|
||||||
* если начальный блок не меньше 14-го, то возвращается
|
|
||||||
eax=5 (not found) и ebx=0;
|
|
||||||
* кстати говоря, формат FAT12 допускает дискеты с размером
|
|
||||||
корневого каталога меньше или больше 14 блоков;
|
|
||||||
* проверки длины не делается;
|
|
||||||
* если удалось прочитать данные с дискеты, возвращается
|
|
||||||
eax=0,ebx=0; в противном случае eax=10 (access denied), ebx=-1.
|
|
||||||
* Функция обрабатывает чтение специальных папок /,/rd,/fd,/hd[n];
|
|
||||||
но результат не соответствует ожидаемому
|
|
||||||
(по работе с обычными файлами/папками), не следует установленным
|
|
||||||
правилам, может измениться в следующих версиях ядра и потому
|
|
||||||
не описывается. Для получения информации об оборудовании
|
|
||||||
используйте подфункцию 11 функции 18 или
|
|
||||||
читайте соответствующие папки подфункцией 1 функции 70.
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
========= Функция 58, подфункция 8 - LBA-чтение с устройства. ========
|
|
||||||
======================================================================
|
|
||||||
Параметры:
|
|
||||||
* eax = 58 - номер функции
|
|
||||||
* ebx = указатель на информационную структуру
|
|
||||||
Формат информационной структуры:
|
|
||||||
* +0: dword: 8 = номер подфункции
|
|
||||||
* +4: dword: номер блока для чтения (считая с 0)
|
|
||||||
* +8: dword: игнорируется (устанавливайте в 1)
|
|
||||||
* +12 = +0xC: dword: указатель на буфер, куда будут записаны данные
|
|
||||||
(512 байт)
|
|
||||||
* +16 = +0x10: dword: указатель на буфер для работы системы
|
|
||||||
(4096 байт)
|
|
||||||
* +20 = +0x14: ASCIIZ-имя устройства: нечувствительно к регистру,
|
|
||||||
одно из /rd/1 = /RamDisk/1, /hd/n = /HardDisk/n,
|
|
||||||
1<=n<=4 - номер устройства: 1=IDE0, ..., 4=IDE3.
|
|
||||||
Вместо цифр допускается, хотя и не рекомендуется для удобства
|
|
||||||
перехода на будущие расширения,
|
|
||||||
использование 'first','second','third','fourth'.
|
|
||||||
Возвращаемое значение:
|
|
||||||
* если указано имя устройства /hd/xxx, где xxx не находится
|
|
||||||
в списке выше:
|
|
||||||
* eax = ebx = 1
|
|
||||||
* если указано неправильное имя устройства
|
|
||||||
(за исключением предыдущего случая):
|
|
||||||
* eax = 5
|
|
||||||
* ebx не меняется
|
|
||||||
* если LBA-доступ запрещён подфункцией 11 функции 21:
|
|
||||||
* eax = 2
|
|
||||||
* ebx разрушается
|
|
||||||
* для рамдиска: попытка чтения блока за пределами рамдиска
|
|
||||||
(18*2*80 блоков) приводит к
|
|
||||||
* eax = 3
|
|
||||||
* ebx = 0
|
|
||||||
* при успешном чтении:
|
|
||||||
* eax = ebx = 0
|
|
||||||
Замечания:
|
|
||||||
* Размер блока - 512 байт; читается один блок.
|
|
||||||
* Не следует полагаться на возвращаемое значение,
|
|
||||||
оно может измениться в следующих версиях.
|
|
||||||
* Требуется, чтобы был разрешён LBA-доступ к устройствам
|
|
||||||
подфункцией 11 функции 21. Узнать это можно вызовом
|
|
||||||
подфункцией 11 функции 26.
|
|
||||||
* LBA-чтение дискеты не поддерживается.
|
|
||||||
* Функция считывает данные физического жёсткого диска;
|
|
||||||
если по каким-то причинам нужны данные конкретного раздела,
|
|
||||||
придётся определять начальный сектор этого раздела
|
|
||||||
(либо напрямую через MBR, либо из расширенной структуры,
|
|
||||||
возвращаемой той же подфункцией 11 функции 18).
|
|
||||||
* Функция не проверяет код ошибки жёсткого диска, так что запрос
|
|
||||||
несуществующего сектора всё равно что-то прочитает
|
|
||||||
(вероятнее всего, нули, но это определяется устройством) и
|
|
||||||
это будет считаться успехом (eax=0).
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
= Функция 58, подфункция 15 - получить информацию о файловой системе.
|
|
||||||
======================================================================
|
|
||||||
Параметры:
|
|
||||||
* eax = 58 - номер функции
|
|
||||||
* ebx = указатель на информационную структуру
|
|
||||||
Формат информационной структуры:
|
|
||||||
* +0: dword: 15 = номер подфункции
|
|
||||||
* +4: dword: игнорируется
|
|
||||||
* +8: dword: игнорируется
|
|
||||||
* +12 = +0xC: dword: игнорируется
|
|
||||||
* +16 = +0x10: dword: игнорируется
|
|
||||||
* +20 = +0x14: (проверяется только второй символ, сразу после слэша)
|
|
||||||
/rd=/RAMDISK или /hd=/HARDDISK
|
|
||||||
Возвращаемое значение:
|
|
||||||
* если второй символ не принадлежит множеству {'r','R','h','H'}:
|
|
||||||
* eax = 3
|
|
||||||
* ebx = ecx = dword [fileinfo] = 0
|
|
||||||
* для рамдиска:
|
|
||||||
* eax = 0 (успех)
|
|
||||||
* ebx = общее число кластеров = 2847
|
|
||||||
* ecx = число свободных кластеров
|
|
||||||
* dword [fileinfo] = размер кластера = 512
|
|
||||||
* для жёсткого диска: база и раздел определяются подфункциями 7 и 8
|
|
||||||
функции 21:
|
|
||||||
* eax = 0 (успех)
|
|
||||||
* ebx = общее число кластеров
|
|
||||||
* ecx = число свободных кластеров
|
|
||||||
* dword [fileinfo] = размер кластера (в байтах)
|
|
||||||
Замечания:
|
|
||||||
* Не удивляйтесь странному расположению 4-го возвращаемого
|
|
||||||
параметра - когда писался этот код, при системных вызовах
|
|
||||||
приложению возвращались только регистры eax,ebx,ecx (из
|
|
||||||
pushad-структуры, передающейся как аргумент системной функции).
|
|
||||||
Теперь это исправлено, так что, возможно, имеет смысл возвращать
|
|
||||||
размер кластера в edx, пока эту функцию не начали использовать.
|
|
||||||
* Вообще-то ещё существует подфункция 11 функции 18, возвращающая
|
|
||||||
информацию о файловой системе. По расширенной таблице дисковой
|
|
||||||
подсистемы можно определить размер кластера (там он хранится
|
|
||||||
в секторах) и общее число кластеров для жёстких дисков.
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
=========== Функция 60 - Inter Process Communication (IPC). ==========
|
=========== Функция 60 - Inter Process Communication (IPC). ==========
|
||||||
======================================================================
|
======================================================================
|
||||||
|
@ -815,9 +815,9 @@ Remarks:
|
|||||||
changed in future versions of the kernel.
|
changed in future versions of the kernel.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
===== Function 18, subfunction 10 - minimize application window. =====
|
======= Function 18, subfunction 10 - minimize topmost window. =======
|
||||||
======================================================================
|
======================================================================
|
||||||
Minimizes the own window.
|
Minimizes the topmost (active) window.
|
||||||
Parameters:
|
Parameters:
|
||||||
* eax = 18 - function number
|
* eax = 18 - function number
|
||||||
* ebx = 10 - subfunction number
|
* ebx = 10 - subfunction number
|
||||||
@ -828,8 +828,8 @@ Remarks:
|
|||||||
keeps position and sizes.
|
keeps position and sizes.
|
||||||
* Restoring of an application window occurs at its activation by
|
* Restoring of an application window occurs at its activation by
|
||||||
subfunction 3.
|
subfunction 3.
|
||||||
* Usually there is no necessity to minimize/restire a window
|
* Usually there is no necessity to minimize/restore a window
|
||||||
obviously: minimization of a window is carried out by the system
|
explicitly: minimization of a window is carried out by the system
|
||||||
at pressing the minimization button (for skinned windows
|
at pressing the minimization button (for skinned windows
|
||||||
it is defined automatically by function 0,
|
it is defined automatically by function 0,
|
||||||
for other windows it can be defined manually by function 8),
|
for other windows it can be defined manually by function 8),
|
||||||
@ -1238,49 +1238,6 @@ Remarks:
|
|||||||
use this variable.
|
use this variable.
|
||||||
* To get system language use subfunction 5 of function 26.
|
* To get system language use subfunction 5 of function 26.
|
||||||
|
|
||||||
======================================================================
|
|
||||||
============== Function 21, subfunction 7 - set HD base. =============
|
|
||||||
======================================================================
|
|
||||||
The HD base defines hard disk to write with usage of obsolete
|
|
||||||
syntax /HD in obsolete function 58; at usage of modern syntax
|
|
||||||
/HD0,/HD1,/HD2,/HD3 base is set automatically.
|
|
||||||
Parameters:
|
|
||||||
* eax = 21 - function number
|
|
||||||
* ebx = 7 - subfunction number
|
|
||||||
* ecx = HD base: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
|
|
||||||
Returned value:
|
|
||||||
* eax = 0
|
|
||||||
Remarks:
|
|
||||||
* Any application at any time can change the base.
|
|
||||||
* Do not change base, when any application works with hard disk.
|
|
||||||
If you do not want system bugs.
|
|
||||||
* To get HD base use subfunction 7 of function 26.
|
|
||||||
* It is also necessary to define used partition of hard disk by
|
|
||||||
subfunction 8.
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
========= Function 21, subfunction 8 - set used HD partition. ========
|
|
||||||
======================================================================
|
|
||||||
The HD partition defines partition of the hard disk to write with
|
|
||||||
usage of obsolete syntax /HD and obsolete function 58;
|
|
||||||
at usage of functions 58 and 70 and modern syntax /HD0,/HD1,/HD2,/HD3
|
|
||||||
base and partition are set automatically.
|
|
||||||
Parameters:
|
|
||||||
* eax = 21 - function number
|
|
||||||
* ebx = 8 - subfunction number
|
|
||||||
* ecx = HD partition (beginning from 1)
|
|
||||||
Return value:
|
|
||||||
* eax = 0
|
|
||||||
Remarks:
|
|
||||||
* Any application at any time can change partition.
|
|
||||||
* Do not change partition when any application works with hard disk.
|
|
||||||
If you do not want system bugs.
|
|
||||||
* To get used partition use subfunction 8 of function 26.
|
|
||||||
* There is no correctness checks.
|
|
||||||
* To get the number of partitions of a hard disk use
|
|
||||||
subfunction 11 of function 18.
|
|
||||||
* It is also necessary to define used HD base by subfunction 7.
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
Function 21, subfunction 11 - enable/disable low-level access to HD.
|
Function 21, subfunction 11 - enable/disable low-level access to HD.
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -1661,41 +1618,6 @@ Remarks:
|
|||||||
appropriate icon (using this function).
|
appropriate icon (using this function).
|
||||||
* To set system language use subfunction 5 of function 21.
|
* To set system language use subfunction 5 of function 21.
|
||||||
|
|
||||||
======================================================================
|
|
||||||
============== Function 26, subfunction 7 - get HD base. =============
|
|
||||||
======================================================================
|
|
||||||
The HD base defines hard disk to write with usage of obsolete
|
|
||||||
syntax /HD in obsolete function 58; at usage of modern syntax
|
|
||||||
/HD0,/HD1,/HD2,/HD3 base is set automatically.
|
|
||||||
Parameters:
|
|
||||||
* eax = 26 - function number
|
|
||||||
* ebx = 7 - subfunction number
|
|
||||||
Returned value:
|
|
||||||
* eax = HD base: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3
|
|
||||||
Remarks:
|
|
||||||
* Any application in any time can change HD base.
|
|
||||||
* To set base use subfunction 7 of function 21.
|
|
||||||
* To get used partition of hard disk use subfunction 8.
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
========= Function 26, subfunction 8 - get used HD partition. ========
|
|
||||||
======================================================================
|
|
||||||
The HD partition defines partition of the hard disk to write with
|
|
||||||
usage of obsolete syntax /HD in obsolete function 58;
|
|
||||||
at usage of functions 58 and 70 and modern syntax /HD0,/HD1,/HD2,/HD3
|
|
||||||
base and partition are set automatically.
|
|
||||||
Parameters:
|
|
||||||
* eax = 26 - function number
|
|
||||||
* ebx = 8 - subfunction number
|
|
||||||
Returned value:
|
|
||||||
* eax = HD partition (beginning from 1)
|
|
||||||
Remarks:
|
|
||||||
* Any application in any time can change partition.
|
|
||||||
* To set partition use subfunction 8 of function 21.
|
|
||||||
* To get number of partitions on a hard disk use
|
|
||||||
subfunction 11 of function 18.
|
|
||||||
* To get base of used hard disk, use subfunction 7.
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
=== Function 26, subfunction 9 - get the value of the time counter. ==
|
=== Function 26, subfunction 9 - get the value of the time counter. ==
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -2315,8 +2237,7 @@ Remarks:
|
|||||||
Parameters:
|
Parameters:
|
||||||
* eax = 48 - function number
|
* eax = 48 - function number
|
||||||
* ebx = 8 - subfunction number
|
* ebx = 8 - subfunction number
|
||||||
* ecx = pointer to a block for function 58, in
|
* ecx = pointer to filename of the skin
|
||||||
which the fields of intermediate buffer and file name are filled
|
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = 0 - success
|
* eax = 0 - success
|
||||||
* otherwise eax = file system error code; if file does not
|
* otherwise eax = file system error code; if file does not
|
||||||
@ -2526,219 +2447,6 @@ Remarks:
|
|||||||
* If BIOS does not support this extension, its behavior is emulated
|
* If BIOS does not support this extension, its behavior is emulated
|
||||||
(through kernel-mode analogues of subfunctions of function 62).
|
(through kernel-mode analogues of subfunctions of function 62).
|
||||||
|
|
||||||
======================================================================
|
|
||||||
================ Function 58 - work with file system. ================
|
|
||||||
======================================================================
|
|
||||||
Parameters:
|
|
||||||
* eax = 58
|
|
||||||
* ebx = pointer to the information structure
|
|
||||||
Returned value:
|
|
||||||
* eax = 0 - success; otherwise file system error code
|
|
||||||
* some subfunctions return value in other registers too
|
|
||||||
General format of the information structure:
|
|
||||||
* +0: dword: subfunction number
|
|
||||||
* +4: dword: number of block
|
|
||||||
* +8: dword: size
|
|
||||||
* +12 = +0xC: dword: pointer to data
|
|
||||||
* +16 = +0x10: dword: pointer to a memory for system operations
|
|
||||||
(4096 bytes)
|
|
||||||
* +20 = +0x14: n db: ASCIIZ-string with the file name
|
|
||||||
Specifications - in documentation on the appropriate subfunction.
|
|
||||||
Filename is case-insensitive for latin letters, russian letters
|
|
||||||
must be capital.
|
|
||||||
Format of filename:
|
|
||||||
/base/number/dir1/dir2/.../dirn/file,
|
|
||||||
where /base/number identifies device, on which file is located:
|
|
||||||
one of
|
|
||||||
* /RD/1 = /RAMDISK/1 to access ramdisk
|
|
||||||
* /FD/1 = /FLOPPYDISK/1 to access first floppy drive,
|
|
||||||
/FD/2 = /FLOPPYDISK/2 to access second one
|
|
||||||
* /HD/x = /HARDDISK/x - obsolete variant of access to hard disk
|
|
||||||
(in this case base is defined by subfunction 7 of function 21),
|
|
||||||
x - partition number (beginning from 1)
|
|
||||||
* /HD0/x, /HD1/x, /HD2/x, /HD3/x to access accordingly to devices
|
|
||||||
IDE0 (Primary Master), IDE1 (Primary Slave),
|
|
||||||
IDE2 (Secondary Master), IDE3 (Secondary Slave);
|
|
||||||
x - partition number on the selected hard drive, varies from 1
|
|
||||||
to 255 (on each hard drive the indexing starts from 1)
|
|
||||||
Remarks:
|
|
||||||
* In the first two cases it is also possible to use FIRST
|
|
||||||
instead of 1, SECOND instead of 2, but it is not recommended
|
|
||||||
for convenience of transition to the future extensions.
|
|
||||||
* Limitation n<=39 is imposed.
|
|
||||||
* Names of folders and file dir1,...,dirn,file must have the
|
|
||||||
format 8.3: name no more than 8 characters, dot, extension no
|
|
||||||
more than 3 characters. Trailing spaces are ignored, no other
|
|
||||||
spaces is allowed. If name occupies equally 8 characters,
|
|
||||||
dot may be omitted (though it is not recommended to use this
|
|
||||||
feature for convenience of transition to the future extensions).
|
|
||||||
* This function does not support folders on ramdisk.
|
|
||||||
Examples:
|
|
||||||
* '/RAMDISK/FIRST/KERNEL.ASM',0
|
|
||||||
'/rd/1/kernel.asm',0
|
|
||||||
* '/HD0/1/kernel.asm',0
|
|
||||||
* '/hd0/1/menuet/pics/tanzania.bmp',0
|
|
||||||
Existing subfunctions:
|
|
||||||
* subfunction 0 - read file/folder
|
|
||||||
* subfunction 8 - LBA-read from device
|
|
||||||
* subfunction 15 - get file system information
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
=========== Function 58, subfunction 0 - read file/folder. ===========
|
|
||||||
======================================================================
|
|
||||||
Parameters:
|
|
||||||
* eax = 58
|
|
||||||
* ebx = pointer to the information structure
|
|
||||||
Format of the information structure:
|
|
||||||
* +0: dword: 0 = subfunction number
|
|
||||||
* +4: dword: first block to read (beginning from 0)
|
|
||||||
* +8: dword: amount of blocks to read
|
|
||||||
* +12 = +0xC: dword: pointer to buffer for data
|
|
||||||
* +16 = +0x10: dword: pointer to buffer for system operations
|
|
||||||
(4096 bytes)
|
|
||||||
* +20 = +0x14: ASCIIZ-name of file, the rules of names forming are
|
|
||||||
given in the general description
|
|
||||||
Returned value:
|
|
||||||
* eax = 0 - success, otherwise file system error code
|
|
||||||
* ebx = file size (in bytes) or -1=0xffffffff, if file was not found
|
|
||||||
Remarks:
|
|
||||||
* Block size is 512 bytes.
|
|
||||||
* This function is obsolete, for reading files use subfunction 0
|
|
||||||
of function 70, for reading folders - subfunction 1 of
|
|
||||||
function 70.
|
|
||||||
* Function can read contents of a folder. Only FAT file system is
|
|
||||||
supported. The format of FAT-folder is described
|
|
||||||
in any FAT documentation.
|
|
||||||
* Size of a folder is determined by size of FAT clusters chain.
|
|
||||||
* If file was ended before last requested block was read,
|
|
||||||
the function will read as many as it can, and after that return
|
|
||||||
eax=6 (EOF).
|
|
||||||
* Function can read root folders /rd/1,/fd/x,/hd[n]/x, but
|
|
||||||
in the first two cases the current implementation does not follow
|
|
||||||
to the declared rules:
|
|
||||||
for /rd/1:
|
|
||||||
* if one want to read 0 blocks, function considers,
|
|
||||||
that he requested 1;
|
|
||||||
* if one requests more than 14 blocks or starting block is
|
|
||||||
not less than 14, function returns eax=5 (not found) and ebx=-1;
|
|
||||||
* size of ramdisk root folder is 14 blocks,
|
|
||||||
0x1C00=7168 bytes; but function returns ebx=0
|
|
||||||
(except of the case of previous item);
|
|
||||||
* strangely enough, it is possible to read 14th block (which
|
|
||||||
generally contains a garbage - I remind, the indexing begins
|
|
||||||
from 0);
|
|
||||||
* if some block with the number not less than 14 was requested,
|
|
||||||
function returns eax=6(EOF); otherwise eax=0.
|
|
||||||
For /fd/x:
|
|
||||||
* if the start block is not less than 14, function returns
|
|
||||||
eax=5 (not found) and ebx=0;
|
|
||||||
* note that format of FAT12 allows floppies with the root size
|
|
||||||
more or less than 14 blocks;
|
|
||||||
* check for length is not performed;
|
|
||||||
* if data was successful read, function returns
|
|
||||||
eax=0,ebx=0; otherwise eax=10 (access denied), ebx=-1.
|
|
||||||
* The function handles reading of special folders /,/rd,/fd,/hd[n];
|
|
||||||
but the result does not correspond to expected (on operations with
|
|
||||||
normal files/folders), does not follow the declared rules,
|
|
||||||
may be changed in future versions of the kernel and consequently
|
|
||||||
is not described. To obtain the information about the equipment
|
|
||||||
use subfunction 11 of function 18 or
|
|
||||||
read corresponding folder with subfunction 1 of function 70.
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
========= Function 58, subfunction 8 - LBA-read from device. =========
|
|
||||||
======================================================================
|
|
||||||
Parameters:
|
|
||||||
* eax = 58 - function number
|
|
||||||
* ebx = pointer to the information structure
|
|
||||||
Format of the information structure:
|
|
||||||
* +0: dword: 8 = subfunction number
|
|
||||||
* +4: dword: number of block to read (beginning from 0)
|
|
||||||
* +8: dword: ignored (set to 1)
|
|
||||||
* +12 = +0xC: dword: pointer to buffer for data (512 bytes)
|
|
||||||
* +16 = +0x10: dword: pointer to buffer for system operations
|
|
||||||
(4096 bytes)
|
|
||||||
* +20 = +0x14: ASCIIZ-name of device: case-insensitive, one of
|
|
||||||
/rd/1 = /RamDisk/1, /hd/n = /HardDisk/n,
|
|
||||||
1<=n<=4 - number of device: 1=IDE0, ..., 4=IDE3.
|
|
||||||
Instead of digits it is allowed, though not recommended for
|
|
||||||
convenience of transition to future extensions, to use
|
|
||||||
'first','second','third','fourth'.
|
|
||||||
Returned value:
|
|
||||||
* for device name /hd/xxx, where xxx is not in the list above:
|
|
||||||
* eax = ebx = 1
|
|
||||||
* for invalid device name (except for the previous case):
|
|
||||||
* eax = 5
|
|
||||||
* ebx does not change
|
|
||||||
* if LBA-access is disabled by subfunction 11 of function 21:
|
|
||||||
* eax = 2
|
|
||||||
* ebx destroyed
|
|
||||||
* for ramdisk: attempt to read block outside ramdisk
|
|
||||||
(18*2*80 blocks) results in
|
|
||||||
* eax = 3
|
|
||||||
* ebx = 0
|
|
||||||
* for successful read:
|
|
||||||
* eax = ebx = 0
|
|
||||||
Remarks:
|
|
||||||
* Block size is 512 bytes; function reads one block.
|
|
||||||
* Do not depend on returned value, it can be changed
|
|
||||||
in future versions.
|
|
||||||
* Function requires that LBA-access to devices is enabled by
|
|
||||||
subfunction 11 of function 21. To check this one can use
|
|
||||||
subfunction 11 of function 26.
|
|
||||||
* LBA-read of floppy is not supported.
|
|
||||||
* Function reads data on physical hard drive; if for any reason
|
|
||||||
data of the concrete partition are required, application must
|
|
||||||
define starting sector of this partition (either directly
|
|
||||||
through MBR, or from the full structure returned by
|
|
||||||
subfunction 11 of function 18).
|
|
||||||
* Function does not check error code of hard disk, so request of
|
|
||||||
nonexisting sector reads something (most probably it will be
|
|
||||||
zeroes, but this is defined by device) and this is considered
|
|
||||||
as success (eax=0).
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
==== Function 58, subfunction 15 - get information on file system. ===
|
|
||||||
======================================================================
|
|
||||||
Parameters:
|
|
||||||
* eax = 58 - function number
|
|
||||||
* ebx = pointer to the information structure
|
|
||||||
Format of the information structure:
|
|
||||||
* +0: dword: 15 = subfunction number
|
|
||||||
* +4: dword: ignored
|
|
||||||
* +8: dword: ignored
|
|
||||||
* +12 = +0xC: dword: ignored
|
|
||||||
* +16 = +0x10: dword: ignored
|
|
||||||
* +20 = +0x14: (only second character is checked)
|
|
||||||
/rd=/RAMDISK or /hd=/HARDDISK
|
|
||||||
Returned value:
|
|
||||||
* if the second character does not belong to set {'r','R','h','H'}:
|
|
||||||
* eax = 3
|
|
||||||
* ebx = ecx = dword [fileinfo] = 0
|
|
||||||
* for ramdisk:
|
|
||||||
* eax = 0 (success)
|
|
||||||
* ebx = total number of clusters = 2847
|
|
||||||
* ecx = number of free clusters
|
|
||||||
* dword [fileinfo] = cluster size = 512
|
|
||||||
* for hard disk: base and partition are defined by subfunctions
|
|
||||||
7 and 8 of function 21:
|
|
||||||
* eax = 0 (success)
|
|
||||||
* ebx = total number of clusters
|
|
||||||
* ecx = number of free clusters
|
|
||||||
* dword [fileinfo] = cluster size (in bytes)
|
|
||||||
Remarks:
|
|
||||||
* Be not surprised to strange layout of 4th returned parameter
|
|
||||||
- when this code was writing, at system calls application got
|
|
||||||
only registers eax,ebx,ecx (from pushad-structure transmitted
|
|
||||||
as argument to the system function). Now it is corrected, so,
|
|
||||||
probably, it is meaningful to return cluster size in edx, while
|
|
||||||
this function is not used yet.
|
|
||||||
* There exists also subfunction 11 of function 18,
|
|
||||||
which returns information on file system. From the full table
|
|
||||||
of disk subsystem it is possible to deduce cluster size (there
|
|
||||||
it is stored in sectors) and total number of clusters
|
|
||||||
for hard disks.
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
========== Function 60 - Inter Process Communication (IPC). ==========
|
========== Function 60 - Inter Process Communication (IPC). ==========
|
||||||
======================================================================
|
======================================================================
|
||||||
|
@ -1955,22 +1955,8 @@ ngsyse3:
|
|||||||
mov [esp+32], eax
|
mov [esp+32], eax
|
||||||
ret
|
ret
|
||||||
ngsyse5:
|
ngsyse5:
|
||||||
; cmp eax,7
|
|
||||||
sub ebx, 2
|
|
||||||
jnz ngsyse7
|
|
||||||
xor eax, eax
|
|
||||||
mov [esp+32], eax
|
|
||||||
ret
|
|
||||||
ngsyse7:
|
|
||||||
; cmp eax,8
|
|
||||||
dec ebx
|
|
||||||
jnz ngsyse8
|
|
||||||
mov eax, [fat32part]
|
|
||||||
mov [esp+32], eax
|
|
||||||
ret
|
|
||||||
ngsyse8:
|
|
||||||
; cmp eax,9
|
; cmp eax,9
|
||||||
dec ebx
|
sub ebx, 4
|
||||||
jnz ngsyse9
|
jnz ngsyse9
|
||||||
mov eax, [timer_ticks];[0xfdf0]
|
mov eax, [timer_ticks];[0xfdf0]
|
||||||
mov [esp+32], eax
|
mov [esp+32], eax
|
||||||
|
Loading…
Reference in New Issue
Block a user