diff --git a/kernel/trunk/data32.inc b/kernel/trunk/data32.inc index 64dc86f807..2cf124d289 100644 --- a/kernel/trunk/data32.inc +++ b/kernel/trunk/data32.inc @@ -462,8 +462,6 @@ cdid rd 1 hdbase rd 1 ; for boot 0x1f0 hdid rd 1 hdpos rd 1 ; for boot 0x1 -label known_part dword -fat32part rd 1 ; for boot 0x1 cdpos rd 1 ;CPUID information diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 0c69ec069a..eec630d53d 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -816,9 +816,9 @@ вызове, оно может измениться в последующих версиях ядра. ====================================================================== -======== Функция 18, подфункция 10 - свернуть окно приложения. ======= +========= Функция 18, подфункция 10 - свернуть активное окно. ======== ====================================================================== -Сворачивает собственное окно. +Сворачивает активное окно. Параметры: * eax = 18 - номер функции * ebx = 10 - номер подфункции @@ -1239,52 +1239,6 @@ dd 1675 переменную не использует. * Получить язык системы можно вызовом подфункции 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 ===================== =========== Разрешить/запретить низкоуровневый доступ к HD. ========== @@ -1674,42 +1628,6 @@ dd 1675 соответствующую иконку (используя описываемую функцию). * Установить язык системы можно вызовом подфункции 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 - получить значение счётчика времени. === ====================================================================== @@ -2543,221 +2461,6 @@ dword-значение цвета 0x00RRGGBB * Если BIOS не поддерживает это расширение, поведение функции эмулируется (через аналоги подфункций функции 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). ========== ====================================================================== diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 69a5c9f595..d84e213c5f 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -815,9 +815,9 @@ Remarks: 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: * eax = 18 - function number * ebx = 10 - subfunction number @@ -828,8 +828,8 @@ Remarks: keeps position and sizes. * Restoring of an application window occurs at its activation by subfunction 3. - * Usually there is no necessity to minimize/restire a window - obviously: minimization of a window is carried out by the system + * Usually there is no necessity to minimize/restore a window + explicitly: minimization of a window is carried out by the system at pressing the minimization button (for skinned windows it is defined automatically by function 0, for other windows it can be defined manually by function 8), @@ -1238,49 +1238,6 @@ Remarks: use this variable. * 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. ====================================================================== @@ -1661,41 +1618,6 @@ Remarks: appropriate icon (using this function). * 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. == ====================================================================== @@ -2315,8 +2237,7 @@ Remarks: Parameters: * eax = 48 - function number * ebx = 8 - subfunction number - * ecx = pointer to a block for function 58, in - which the fields of intermediate buffer and file name are filled + * ecx = pointer to filename of the skin Returned value: * eax = 0 - success * 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 (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). ========== ====================================================================== diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 4e570d996d..5d93f1a8b4 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -1955,22 +1955,8 @@ ngsyse3: mov [esp+32], eax ret 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 - dec ebx + sub ebx, 4 jnz ngsyse9 mov eax, [timer_ticks];[0xfdf0] mov [esp+32], eax