diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index a29435d407..be2f32e1cc 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -1,4 +1,4 @@ -СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.7.5.0+ +СИСТЕМНЫЕ ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ Kolibri 0.7.7.0 Номер функции помещается в регистр eax. Вызов системной функции осуществляется командой "int 0x40". @@ -41,7 +41,7 @@ * esi = 0xXYRRGGBB - цвет заголовка * RR, GG, BB определяют сам цвет * Y=0 - обычное окно, Y=1 - неперемещаемое окно - * X определяет градиент заголовка: X=0 - нет градиента, + * X определяет градиент заголовка: X=0 - нет градиента, X=8 - обычный градиент, для окон типа II X=4 - негативный градиент * прочие значения X и Y зарезервированы @@ -383,7 +383,7 @@ собственно работу, и времени простоя в ожидании прерывания (которое можно получить вызовом подфункции 4 функции 18). * Начиная со слота 2, размещаются обычные приложения. - * Обычные приложения размещаются в памяти по адресу 0x0 + * Обычные приложения размещаются в памяти по адресу 0 (константа ядра std_application_base_address). Наложения не происходит, поскольку у каждого процесса своя таблица страниц. @@ -665,7 +665,7 @@ * Узнать, какое окно является активным, можно вызовом подфункции 7. ====================================================================== - Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду. + Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду. ====================================================================== Под пустыми тактами понимается время, в которое процессор простаивает в ожидании прерывания (в инструкции hlt). @@ -686,7 +686,7 @@ * eax = тактовая частота (по модулю 2^32 тактов = 4ГГц) ====================================================================== - Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске. + Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске. ====================================================================== Параметры: * eax = 18 - номер функции @@ -766,7 +766,7 @@ Замечания: * Минимизированное окно с точки зрения функции 9 сохраняет положение и размеры. - * Восстановление окна приложения происходит при активизировании + * Восстановление окна приложения происходит при активизировании подфункцией 3. * Обычно нет необходимости явно сворачивать/разворачивать своё окно: сворачивание окна осуществляется системой при нажатии на кнопку @@ -849,10 +849,10 @@ db a,b,c,d для версии a.b.c.d db UID_xxx: одно из UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2 dd REV - номер svn-ревизии ядра -Для ядра Kolibri 0.7.1.0: -db 0,7,1,0 +Для ядра Kolibri 0.7.7.0: +db 0,7,7,0 db 2 -dd 638 +dd 1319 ====================================================================== ====================== Функция 18, подфункция 14 ===================== @@ -1029,7 +1029,7 @@ dd 638 * иначе eax = номер слота ====================================================================== - Функция 18, подфункция 22 - операции с окном другого процесса/потока. + Функция 18, подфункция 22 - операции с окном другого процесса/потока. ====================================================================== Параметры: * eax = 18 - номер функции @@ -1066,7 +1066,7 @@ dd 638 * eax = 0 - успешно * eax = 1 - не определён базовый порт Замечания: - * Предварительно должен быть определён базовый порт вызовом + * Предварительно должен быть определён базовый порт вызовом подфункции 1 функции 21. ====================================================================== @@ -1082,7 +1082,7 @@ dd 638 Замечания: * Номер порта должен удовлетворять условиям 0x100<=ecx<=0xFFFF. * Установка базы нужна для работы функции 20. - * Получить установленный базовый порт можно вызовом + * Получить установленный базовый порт можно вызовом подфункции 1 функции 26. ====================================================================== @@ -1112,7 +1112,7 @@ dd 638 нормальная раскладка, после чего из кода вычитается 0x60; если не нажата ни одна из управляющих клавиш, то используется нормальная раскладка. - * Получить раскладки и идентификатор страны можно с помощью + * Получить раскладки и идентификатор страны можно с помощью подфункции 2 функции 26. * Идентификатор страны - глобальная системная переменная, которая самим ядром не используется; однако приложение @panel отображает @@ -1130,7 +1130,7 @@ dd 638 * eax = 0 Замечания: * База CD используется функцией 24. - * Получить установленную базу CD можно вызовом + * Получить установленную базу CD можно вызовом подфункции 3 функции 26. ====================================================================== @@ -1168,7 +1168,7 @@ dd 638 * Не следует изменять базу, когда какое-нибудь приложение работает с жёстким диском. Если не хотите глюков системы. * Получить установленную базу можно вызовом подфункции 7 функции 26. - * Следует также определить используемый раздел жёсткого диска + * Следует также определить используемый раздел жёсткого диска подфункцией 8. ====================================================================== @@ -1191,9 +1191,9 @@ dd 638 * Получить установленный раздел можно вызовом подфункции 8 функции 26. * Проверок на корректность не делается. - * Узнать число разделов на жёстком диске можно вызовом + * Узнать число разделов на жёстком диске можно вызовом подфункции 11 функции 18. - * Следует также определить используемую базу жёсткого диска + * Следует также определить используемую базу жёсткого диска подфункцией 7. ====================================================================== @@ -1279,13 +1279,13 @@ dd 638 * ebx = частота вертикальной развёртки (в Гц) * ecx = номер текущего видеорежима Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. * Если нужны только размеры экрана, целесообразней использовать функцию 14 с учётом того, что она возвращает размеры на 1 меньше. ====================================================================== -= Функция 21, подфункция 13, подподфункция 3 - установить видеорежим. += Функция 21, подфункция 13, подподфункция 3 - установить видеорежим. ====================================================================== Параметры: * eax = 21 - номер функции @@ -1298,7 +1298,7 @@ dd 638 * eax = 0 - успешно * ebx, ecx разрушаются Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. * Номер видеорежима и частота должны быть в таблице, возвращаемой функцией драйвера 1. @@ -1317,7 +1317,7 @@ dd 638 * eax = 0 - успешно * ebx, ecx разрушаются Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. ====================================================================== @@ -1337,7 +1337,7 @@ dd 638 * eax = 0 - успешно * ebx, ecx разрушаются Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. * Функция влияет только на физический размер изображения на мониторе; логический размер (число пикселей) не меняется. @@ -1418,7 +1418,7 @@ dd 638 * eax = 0 - успешно * eax = 1 - не определена база CD Замечания: - * Предварительно нужно определить базовый порт CD вызовом + * Предварительно нужно определить базовый порт CD вызовом подфункции 3 функции 21. * В секунде 75 фреймов, в минуте 60 секунд. * Функция асинхронна (возвращает управление, когда началось @@ -1439,7 +1439,7 @@ dd 638 * Формат таблицы с информацией о дорожках такой же, как и для ATAPI-CD команды 43h (READ TOC), обычной таблицы (подкоманда 00h). Адреса возвращаются в формате MSF. - * Предварительно нужно определить базовый порт CD вызовом + * Предварительно нужно определить базовый порт CD вызовом подфункции 3 функции 21. * Функция возвращает информацию только о не более чем 100 первых дорожках. В большинстве случаев этого достаточно. @@ -1454,7 +1454,7 @@ dd 638 * eax = 0 - успешно * eax = 1 - не определена база CD Замечания: - * Предварительно нужно определить базовый порт CD вызовом + * Предварительно нужно определить базовый порт CD вызовом подфункции 3 функции 21. ====================================================================== @@ -1498,7 +1498,7 @@ dd 638 Возвращаемое значение: * eax = номер порта Замечания: - * Установить базовый порт можно вызовом + * Установить базовый порт можно вызовом подфункции 1 функции 21. ====================================================================== @@ -1531,7 +1531,7 @@ dd 638 нормальная раскладка, после чего из кода вычитается 0x60; если не нажата ни одна из управляющих клавиш, то используется нормальная раскладка. - * Установить раскладки и идентификатор страны можно с помощью + * Установить раскладки и идентификатор страны можно с помощью подфункции 2 функции 21. * Идентификатор страны - глобальная системная переменная, которая самим ядром не используется; однако приложение @panel отображает @@ -1626,7 +1626,7 @@ dd 638 * eax = 0/1 - запрещён/разрешён Замечания: * Используется при LBA-чтении (подфункция 8 функции 58). - * Установить текущее состояние можно вызовом + * Установить текущее состояние можно вызовом подфункции 11 функции 21. ====================================================================== @@ -1641,7 +1641,7 @@ dd 638 Замечания: * Используется при работе с шиной PCI (функция 62). * Текущая реализация использует только младший бит ecx. - * Установить текущее состояние можно вызовом + * Установить текущее состояние можно вызовом подфункции 12 функции 21. ====================================================================== @@ -1677,62 +1677,14 @@ dd 638 * ecx = указатель на буфер * edx = размер буфера Возвращаемое значение: - * eax = - 1 ощибка, папка текущего потока имеет длинну более чем 4096 символов. * eax = длина имени текущей папки (включая завершающий 0) Замечания: * Если размера буфера недостаточно для копирования всего имени, - копируются только первые (edx-1) байт - и в конце ставится завершающий 0. - -====================================================================== -================ Функция 32 - удалить файл с рамдиска. =============== -====================================================================== -Параметры: - * eax = 32 - номер функции - * ebx = указатель на имя файла -Возвращаемое значение: - * eax = 0 - успешно; иначе код ошибки файловой системы -Замечания: - * Эта функция устарела; функция 58 позволяет выполнять - те же действия с расширенными возможностями. - * Текущая реализация возвращает только значения 0(успех) и - 5(файл не найден). - * Имя файла должно быть либо в формате 8+3 символов (первые - 8 символов - собственно имя, последние 3 - расширение, - короткие имена и расширения дополняются пробелами), - либо в формате 8.3 символов "FILE.EXT"/"FILE.EX " - (имя не более 8 символов, точка, расширение 3 символа, - дополненное при необходимости пробелами). - Имя файла должно быть записано заглавными буквами. - Завершающий символ с кодом 0 не нужен (не ASCIIZ-строка). - * Эта функция не поддерживает папок на рамдиске. - -====================================================================== -=============== Функция 33 - записать файл на рамдиск. =============== -====================================================================== -Параметры: - * eax = 33 - номер функции - * ebx = указатель на имя файла - * ecx = указатель на данные для записи - * edx = число байт для записи - * следует устанавливать esi=0 -Возвращаемое значение: - * eax = 0 - успешно, иначе код ошибки файловой системы -Замечания: - * Эта функция устарела; функция 70 позволяет выполнять - те же действия с расширенными возможностями. - * Если указать ненулевое значение в esi и на рамдиске уже есть - указанный файл, то будет создан ещё один файл с тем же именем. - * В противном случае файл перезаписывается. - * Имя файла должно быть либо в формате 8+3 символов - (первые 8 символов - собственно имя, последние 3 - расширение, - короткие имена и расширения дополняются пробелами), - либо в формате 8.3 символов "FILE.EXT"/"FILE.EX " - (имя не более 8 символов, точка, расширение 3 символа, - дополненное при необходимости пробелами). - Имя файла должно быть записано заглавными буквами. - Завершающий символ с кодом 0 не нужен (не ASCIIZ-строка). - * Эта функция не поддерживает папок на рамдиске. + копируются только первые (edx-1) байт и в конце ставится + завершающий 0. + * По умолчанию, текущая папка для потока - "/rd/1". + * При создании процесса/потока текущая папка наследуется от + родителя. ====================================================================== ============ Функция 35 - прочитать цвет точки на экране. ============ @@ -1858,7 +1810,7 @@ dd 638 ------------------ Подфункция 7 - данные прокрутки ------------------- Параметры: * eax = 37 - номер функции - * ebx = 6 - номер подфункции + * ebx = 7 - номер подфункции Возвращаемое значение: * eax = [horizontal offset]*65536 + [vertical offset] Замечания: @@ -1893,7 +1845,7 @@ dd 638 Возвращаемое значение: * eax = [ширина]*65536 + [высота] Замечания: - * Есть парная команда установки размеров фонового изображения - + * Есть парная команда установки размеров фонового изображения - подфункция 1 функции 15. После которой, разумеется, следует заново определить само изображение. @@ -1912,7 +1864,7 @@ dd 638 * Не следует полагаться на возвращаемое значение в случае неверного смещения, оно может измениться в следующих версиях ядра. * Смещение точки с координатами (x,y) вычисляется как (x+y*xsize)*3. - * Есть парная функция установки точки на фоновом изображении - + * Есть парная функция установки точки на фоновом изображении - подфункция 2 функции 15. ====================================================================== @@ -1925,7 +1877,7 @@ dd 638 * eax = 1 - замостить * eax = 2 - растянуть Замечания: - * Есть парная функция установки режима отрисовки фона - + * Есть парная функция установки режима отрисовки фона - подфункция 4 функции 15. ====================================================================== @@ -2068,7 +2020,7 @@ dd 638 все зарезервированные им IRQ. ====================================================================== -= Функция 46 - зарезервировать/освободить группу портов ввода/вывода. += Функция 46 - зарезервировать/освободить группу портов ввода/вывода. ====================================================================== К зарезервированным портам можно обращаться напрямую из приложения командами in/out (рекомендуемый способ) и вызовом функции 43 @@ -2163,7 +2115,7 @@ dd 638 Возвращаемое значение: * функция не возвращает значения Замечания: - * После вызова описываемой функции следует перерисовать экран + * После вызова описываемой функции следует перерисовать экран подфункцией 0. * Тип кнопок влияет только на их прорисовку функцией 8. @@ -2180,7 +2132,7 @@ dd 638 Возвращаемое значение: * функция не возвращает значения Замечания: - * После вызова описываемой функции следует перерисовать экран + * После вызова описываемой функции следует перерисовать экран подфункцией 0. * Таблица стандартных цветов влияет только на приложения, которые эту таблицу явным образом получают (подфункцией 3) и @@ -2219,11 +2171,11 @@ dword- Замечания: * Структура таблицы цветов описана в стандартном включаемом файле macros.inc под названием system_colors; например, можно писать: - sc system_colors ; объявление переменной - ... ; где-то надо вызвать - ; описываемую функцию с ecx=sc - mov ecx, [sc.work_button_text] ; читаем цвет текста - ; на кнопке в рабочей области + sc system_colors ; объявление переменной + ... ; где-то надо вызвать + ; описываемую функцию с ecx=sc + mov ecx, [sc.work_button_text] ; читаем цвет текста + ; на кнопке в рабочей области * Использование/неиспользование этих цветов - дело исключительно самой программы. Для использования нужно просто при вызове функций рисования указывать цвет, взятый из этой таблицы. @@ -2294,7 +2246,7 @@ dword- Аналогично по оси y. * Смотри также функцию 14, позволяющую определить размеры всего экрана. - * Есть парная функция получения рабочей области - + * Есть парная функция получения рабочей области - подфункция 5. * Эта функция автоматически перерисовывает экран, по ходу дела обновляет координаты и размеры максимизированных окон. @@ -2418,7 +2370,7 @@ dword- * иначе eax = TID - идентификатор потока ====================================================================== -= Функция 52, подфункция 0 - получить конфигурацию сетевого драйвера. += Функция 52, подфункция 0 - получить конфигурацию сетевого драйвера. ====================================================================== Параметры: * eax = 52 - номер функции @@ -2443,7 +2395,7 @@ dword- * Локальный IP-адрес устанавливается подфункцией 3. ====================================================================== - Функция 52, подфункция 2 - установить конфигурацию сетевого драйвера. + Функция 52, подфункция 2 - установить конфигурацию сетевого драйвера. ====================================================================== Параметры: * eax = 52 - номер функции @@ -2771,7 +2723,7 @@ dword- * ebx разрушается ====================================================================== - Функция 53, подфункция 255 - отладочная информация сетевого драйвера. + Функция 53, подфункция 255 - отладочная информация сетевого драйвера. ====================================================================== Параметры: * eax = 53 - номер функции @@ -3013,8 +2965,8 @@ dword- * Размер блока - 512 байт; читается один блок. * Не следует полагаться на возвращаемое значение, оно может измениться в следующих версиях. - * Требуется, чтобы был разрешён LBA-доступ к устройствам - подфункцией 11 функции 21. Узнать это можно вызовом + * Требуется, чтобы был разрешён LBA-доступ к устройствам + подфункцией 11 функции 21. Узнать это можно вызовом подфункцией 11 функции 26. * LBA-чтение дискеты не поддерживается. * Функция считывает данные физического жёсткого диска; @@ -3028,7 +2980,7 @@ dword- это будет считаться успехом (eax=0). ====================================================================== -= Функция 58, подфункция 15 - получить информацию о файловой системе. += Функция 58, подфункция 15 - получить информацию о файловой системе. ====================================================================== Параметры: * eax = 58 - номер функции @@ -3125,10 +3077,10 @@ IPC Программе доступны данные графического экрана (область памяти, которая собственно и отображает содержимое экрана) напрямую без вызовов системных функций через селектор gs: - mov eax, [gs:0] + mov eax, [gs:0] поместит в eax первый dword буфера, содержащий информацию о цвете левой верхней точки (и, возможно, цвета нескольких следующих). - mov [gs:0], eax + mov [gs:0], eax при работе в режимах VESA c LFB установит цвет левой верхней точки (и возможно, цвета нескольких следующих). @@ -3289,63 +3241,6 @@ IPC входит, например, в известный Interrupt List by Ralf Brown; список вторых должен быть указан в документации по устройству. -====================================================================== -====================== Функция 62, подфункция 11 ===================== -== Инициализировать пользовательский В/В с отображением на память == -====================================================================== -Параметры: - * eax = 62 - номер функции - * bl = 11 - номер подфункции - * cx = адрес PCI-устройства -Возвращаемое значение: - * eax = -1 - доступ к PCI запрещён; - * eax = -2 - доступ к MMIO-блокам устройства не разрешён; - * eax = -3 - ошибка аллокации пользовательской дин. памяти; иначе - * eax = размер доступной динамической памяти. -Замечания: - * Предварительно должен быть разрешён низкоуровневый доступ к PCI - для приложений подфункцией 12 функции 21. - * адрес PCI-устройства должен совпадать с системной переменной - mmio_pci_addr - -====================================================================== -====================== Функция 62, подфункция 12 ===================== -== Выделить диапазон линейных адресов для пользовательского MMIO == -====================================================================== -Параметры: - * eax = 62 - номер функции - * bl = 12 - номер подфункции - * bh = номер BAR-регистра в конфигурационной зоне PCI - * ecx = размер MMIO-блока (в байтах) - * edx = смещение относительно начала MMIO-блока (в 4K-страницах!) -Возвращаемое значение: - * eax = -1 - доступ к PCI запрещён; - * eax = -2 - неверный номер BAR-регистра; - * eax = -3 - BAR не содержит адреса IO; - * eax = -4 - BAR адресует порты IO; - * eax = -5 - ошибка аллокации; иначе - * eax = начальный адрес MMIO в адресном пространстве приложения. -Замечания: - * Предварительно должен быть разрешён низкоуровневый доступ к PCI - для приложений подфункцией 12 функции 21. - * Адрес PCI-устройства задается системной переменной mmio_pci_addr. - * Предоставленный диапазон линейных адресов должен освобождаться - посредством вызова функции 62:13 - -====================================================================== -====================== Функция 62, подфункция 13 ===================== -== Освободить диапазон линейных адресов пользовательского MMIO == -====================================================================== -Параметры: - * eax = 62 - номер функции - * bl = 12 - номер подфункции - * ecx = начальный адрес освобождаемого MMIO-блока в адресном - пространстве приложения -Возвращаемое значение: - * eax = 1 - блок успешно освобожден; -Замечания: - * Предварительно приложению должен быть выделен uMMIO-блок (fn62:12) - ====================================================================== ================ Функция 63 - работа с доской отладки. =============== ====================================================================== @@ -3459,7 +3354,6 @@ IPC ====================================================================== Режим ввода влияет на результаты чтения клавиш функцией 2. При загрузке программы для неё устанавливается ASCII-режим ввода. -Если вызывается несуществующая подфункция возвращается в eax=-1. -------- Подфункция 1 - установить режим ввода с клавиатуры. --------- Параметры: @@ -3702,25 +3596,20 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); или подфункцией 20. ====================================================================== -==================== Функция 68, подфункция 14 ======================= -===== Ожидать получения сигнала, от других приложений/драйверов. ===== +====================== Функция 68, подфункция 14 ===================== +====== Ожидать получения сигнала от других приложений/драйверов. ===== ====================================================================== Параметры: * eax = 68 - номер функции * ebx = 14 - номер подфункции * ecx = указатель на буфер для информации (24 байта) Возвращаемое значение: + * eax разрушается * буфер, на который указывает ecx, содержит следующую информацию: * +0: dword: идентификатор последующих данных сигнала * +4: данные принятого сигнала (20 байт), формат которых определяется первым dword-ом -====================================================================== -== Функция 68, подфункция 15 - установить обработчик исключений FPU. = -====================================================================== -Удалена (в текущей реализации просто возвращает 0) -Использовать подфункции 24, 25 - ====================================================================== =========== Функция 68, подфункция 16 - загрузить драйвер. =========== ====================================================================== @@ -3759,12 +3648,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); определяются драйвером. * Предварительно должен быть получен хэндл драйвера подфункцией 16. -====================================================================== -== Функция 68, подфункция 18 - установить обработчик исключений SSE. = -====================================================================== -Удалена (в текущей реализации просто возвращает 0) -Использовать подфункции 24, 25 - ====================================================================== ============= Функция 68, подфункция 19 - загрузить DLL. ============= ====================================================================== @@ -3860,7 +3743,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); области памяти. ====================================================================== -==== Функция 68, подфункция 24 - установить обработчик исключений === +==== Функция 68, подфункция 24 - установить обработчик исключений. === ====================================================================== Параметры: * eax = 68 - номер функции @@ -3871,26 +3754,26 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * eax = адрес старого обработчика исключений (0, если не установлен) * ebx = маска старого обработчика исключений Замечания: - * Номер бита в маске исключений соответствуют номеру исключения по - спецификации на процессор (Intel-PC). Так например, исключения FPU - имеют номер 16 (#MF), а SSE - 19 (#XF). + * Номер бита в маске исключений соответствует номеру исключения по + спецификации на процессор (Intel-PC). Так, например, исключения + FPU имеют номер 16 (#MF), а SSE - 19 (#XF). * В данной реализации игнорируется запрос на перехват исключения 7 - система обрабатывает #NM самостоятельно. * Пользовательский обработчик получает номер исключения параметром в стеке. Поэтому правильный выход из обработчика: RET 4. Возврат при этом производится на команду, вызвавшую исключение. - * При передаче управления обработчику исключений, сбрасывается + * При передаче управления обработчику исключений сбрасывается соответствующий бит в маске исключений. Возникновение этого же - исключения в последствии - приведет к default-обработке такового. - А именно: к завершению работы приложения, или приостановке с - нотификацией отлаживающему приложению. - * После завершения критических действий в обработчике пользователя, + исключения впоследствии приведёт к умолчальной обработке такового. + А именно: к завершению работы приложения в отсутствии отладчика, + приостановка с уведомлением отлаживающего приложения иначе. + * После завершения критических действий в обработчике пользователя восстановление бита маски данного исключения можно сделать - подфункцией 25. Сброс флагов исключений в модулях FPU и XMM - - также возлагается на обработчик пользователя. + подфункцией 25. Сброс флагов исключений в модулях FPU и XMM также + возлагается на обработчик пользователя. ====================================================================== -= Функция 68, подфункция 25 - изменение состояния активности сигнала = += Функция 68, подфункция 25 - изменить состояние активности сигнала. = ====================================================================== Параметры: * eax = 68 - номер функции @@ -3898,10 +3781,11 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * ecx = номер сигнала * edx = значение устанавливаемой активности (0/1) Возвращаемое значение: - * eax = старое значение активности сигнала (0/1) + * eax = -1 - задан неверный номер сигнала + * иначе eax = старое значение активности сигнала (0/1) Замечания: * В текущей реализации изменяется только маска пользовательского - обработчика исключений, установленного подфункцией 24. При этом, + обработчика исключений, установленного подфункцией 24. При этом номер сигнала соответствует номеру исключения. ====================================================================== @@ -3971,7 +3855,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); и при поступлении нового сообщения система будет ждать. Для синхронизации обрамляйте всю работу с буфером операциями блокировки/разблокировки - neg [bufsize] + neg [bufsize] * Данные в буфере трактуются как массив элементов переменной длины - сообщений. Формат сообщения указан в общем описании. @@ -4082,7 +3966,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); общем описании). ====================================================================== - Функция 69, подфункция 7 - записать в память отлаживаемого процесса. + Функция 69, подфункция 7 - записать в память отлаживаемого процесса. ====================================================================== Параметры: * eax = 69 - номер функции @@ -4204,6 +4088,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * '/hd0/2/menuet/pics/tanzania.bmp',0 * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0 * '/sys/MySuperApp.ini',0 +Также функция поддерживает относительные имена. Если путь начинается +не с '/', то он считается относительно текущей папки. Получить или +установить текущую папку можно с помощью сисфункции 30. + Доступные подфункции: * подфункция 0 - чтение файла * подфункция 1 - чтение папки diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 8d226d1cf6..a8d97c6908 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -1,4 +1,4 @@ -SYSTEM FUNCTIONS of OS Kolibri 0.7.5.0 +SYSTEM FUNCTIONS of OS Kolibri 0.7.7.0 Number of the function is located in the register eax. The call of the system function is executed by "int 0x40" command. @@ -376,8 +376,8 @@ Remarks: and idle time in waiting for interrupt (which can be got by call to subfunction 4 of function 18). * Beginning from slot 2, the normal applications are placed. - * Applications are placed in memory at the address 0x0 - (kernel constant 'std_application_base_address'). + * The normal applications are placed in memory at the address + 0 (kernel constant 'std_application_base_address'). There is no intersection, as each process has its own page table. * At creation of the thread it is assigned the slot in the system table and identifier (Process/Thread IDentifier = @@ -679,7 +679,7 @@ Returned value: * eax = clock rate (modulo 2^32 clock ticks = 4GHz) ====================================================================== - Function 18, subfunction 6 - save ramdisk to the file on hard drive. + Function 18, subfunction 6 - save ramdisk to the file on hard drive. ====================================================================== Parameters: * eax = 18 - function number @@ -761,7 +761,7 @@ Returned value: Remarks: * The minimized window from the point of view of function 9 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. * Usually there is no necessity to minimize/restire a window obviously: minimization of a window is carried out by the system @@ -771,7 +771,7 @@ Remarks: restore of a window is done by the application '@panel'. ====================================================================== - Function 18, subfunction 11 - get information on the disk subsystem. + Function 18, subfunction 11 - get information on the disk subsystem. ====================================================================== Parameters: * eax = 18 - function number @@ -846,10 +846,10 @@ Structure of the buffer: db a,b,c,d for version a.b.c.d db UID_xxx: one of UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2 dd REV - kernel SVN revision number -For Kolibri 0.7.1.0 kernel: -db 0,7,0,0 +For Kolibri 0.7.7.0 kernel: +db 0,7,7,0 db 2 -dd 638 +dd 1319 ====================================================================== ======= Function 18, subfunction 14 - wait for screen retrace. ======= @@ -1062,7 +1062,7 @@ Returned value (is the same for both subfunctions): * eax = 0 - success * eax = 1 - base port is not defined Remarks: - * Previously the base port must be defined by + * Previously the base port must be defined by subfunction 1 of function 21. ====================================================================== @@ -1106,7 +1106,7 @@ Remarks: if Alt and Shift are not pressed, but Ctrl is pressed, the normal layout is used and then from the code is subtracted 0x60; if no control key is pressed, the normal layout is used. - * To get layout and country identifier use + * To get layout and country identifier use subfunction 2 of function 26. * Country identifier is global system variable, which is not used by the kernel itself; however the application '@panel' displays @@ -1160,7 +1160,7 @@ Remarks: * 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 + * It is also necessary to define used partition of hard disk by subfunction 8. ====================================================================== @@ -1182,12 +1182,12 @@ Remarks: 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 + * 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. ====================================================================== Parameters: * eax = 21 - function number @@ -1201,7 +1201,7 @@ Remarks: * To get current status use subfunction 11 of function 26. ====================================================================== - Function 21, subfunction 12 - enable/disable low-level access to PCI. + Function 21, subfunction 12 - enable/disable low-level access to PCI. ====================================================================== Parameters: * eax = 21 - function number @@ -1268,7 +1268,7 @@ Returned value: * ebx = frequency of the vertical scanning (in Hz) * ecx = number of current videomode Remarks: - * Driver must be initialized by call to + * Driver must be initialized by call to driver function 1. * If only screen sizes are required, it is more expedient to use function 14 taking into account that it @@ -1403,7 +1403,7 @@ Returned value: * eax = 0 - success * eax = 1 - CD base is not defined Remarks: - * Previously CD base must be defined by the call to + * Previously CD base must be defined by the call to subfunction 3 of function 21. * One second includes 75 frames, one minute includes 60 seconds. * The function is asynchronous (returns control, when play begins). @@ -1423,7 +1423,7 @@ Remarks: * The format of the table with tracks information is the same as for ATAPI-CD command 43h (READ TOC), usual table (subcommand 00h). Function returns addresses in MSF. - * Previously CD base port must be set by call to + * Previously CD base port must be set by call to subfunction 3 of function 21. * Function returns information only about no more than 100 first tracks. In most cases it is enough. @@ -1438,7 +1438,7 @@ Returned value: * eax = 0 - success * eax = 1 - CD base is not defined Remarks: - * Previously CD base port must be defined by call to + * Previously CD base port must be defined by call to subfunction 3 of function 21. ====================================================================== @@ -1513,7 +1513,7 @@ Remarks: if Alt and Shift are not pressed, but Ctrl is pressed, the normal layout is used and then from the code is subtracted 0x60; if no control key is pressed, the normal layout is used. - * To set layout and country identifier use + * To set layout and country identifier use subfunction 2 of function 21. * Country identifier is global system variable, which is not used by the kernel itself; however the application '@panel' displays @@ -1658,56 +1658,9 @@ Returned value: Remarks: * If the buffer is too small to hold all data, only first (edx-1) bytes are copied and than terminating 0 is inserted. - -====================================================================== -=============== Function 32 - delete file from ramdisk. ============== -====================================================================== -Parameters: - * eax = 32 - function number - * ebx = pointer to the filename -Returned value: - * eax = 0 - success; otherwise file system error code -Remarks: - * This function is obsolete; function 58 allows to fulfill - the same operations with the extended possibilities. - * The current implementation returns only values 0(success) and - 5(file not found). - * The filename must be either in the format 8+3 characters - (first 8 characters - name itself, last 3 - extension, - the short names and extensions are supplemented with spaces), - or in the format 8.3 characters "FILE.EXT"/"FILE.EX " - (name no more than 8 characters, dot, extension 3 characters - supplemented if necessary by spaces). - The filename must be written with capital letters. The terminating - character with code 0 is not necessary (not ASCIIZ-string). - * This function does not support folders on the ramdisk. - -====================================================================== -================ Function 33 - write file to ramdisk. ================ -====================================================================== -Parameters: - * eax = 33 - function number - * ebx = pointer to the filename - * ecx = pointer to data for writing - * edx = number of bytes for writing - * should be set esi=0 -Returned value: - * eax = 0 - success, otherwise file system error code -Remarks: - * This function is obsolete; function 70 allows to fulfil - the same operations with extended possibilities. - * If esi contains non-zero value and selected file already exists, - one more file with the same name will be created. - * Otherwise file will be overwritten. - * The filename must be either in the format 8+3 characters - (first 8 characters - name itself, last 3 - extension, - the short names and extensions are supplemented with spaces), - or in the format 8.3 characters "FILE.EXT"/"FILE.EX " - (name no more than 8 characters, dot, extension 3 characters - supplemented if necessary by spaces). - The filename must be written with capital letters. The terminating - character with code 0 is not necessary (not ASCIIZ-string). - * This function does not support folders on the ramdisk. + * By default, current folder for the thread is "/rd/1". + * At process/thread creation the current folder will be inherited + from the parent. ====================================================================== ======= Function 35 - read the color of a pixel on the screen. ======= @@ -1888,7 +1841,7 @@ Remarks: changed in future kernel versions. * Offset for pixel with coordinates (x,y) is calculated as (x+y*xsize)*3. - * There is a pair function to set pixel on the background image - + * There is a pair function to set pixel on the background image - subfunction 2 of function 15. ====================================================================== @@ -1901,7 +1854,7 @@ Returned value: * eax = 1 - tile * eax = 2 - stretch Remarks: - * There is a pair function to set drawing mode - + * There is a pair function to set drawing mode - subfunction 4 of function 15. ====================================================================== @@ -2193,11 +2146,11 @@ Remarks: * Structure of the color table is described in the standard include file 'macros.inc' as 'system_colors'; for example, it is possible to write: - sc system_colors ; variable declaration - ... ; somewhere one must call - ; this function with ecx=sc - mov ecx, [sc.work_button_text] ; read text color on - ; buttin in working area + sc system_colors ; variable declaration + ... ; somewhere one must call + ; this function with ecx=sc + mov ecx, [sc.work_button_text] ; read text color on + ; buttin in working area * A program itself desides to use or not to use color table. For usage program must simply at calls to drawing functions select color taken from the table. @@ -2392,7 +2345,7 @@ Parameters: Returned value: * eax = -1 - error (there is too many threads) * otherwise eax = TID - thread identifier - + ====================================================================== === Function 52, subfunction 0 - get network driver configuration. === @@ -2470,7 +2423,7 @@ Remarks: performs no checks on correctness. ====================================================================== - Function 52, subfunction 8 - read data from the network output queue. + Function 52, subfunction 8 - read data from the network output queue. ====================================================================== Parameters: * eax = 52 - function number @@ -2749,7 +2702,7 @@ Returned value: * ebx destroyed ====================================================================== -= Function 53, subfunction 255 - debug information of network driver. += Function 53, subfunction 255 - debug information of network driver. ====================================================================== Parameters: * eax = 53 - function number @@ -2780,7 +2733,7 @@ Possible values for ecx: * 6: status of packet driver, 0=inactive, nonzero=active ====================================================================== - Function 55, subfunction 55 - begin to play data on built-in speaker. + Function 55, subfunction 55 - begin to play data on built-in speaker. ====================================================================== Parameters: * eax = 55 - function number @@ -2925,7 +2878,7 @@ Remarks: 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) ш ebx=-1; - * size of ramdisk root folder is 14 blocks, + * size of ramdisk root folder is 14 blocks, 0x1C00=7168 срщЄ; but function returns ebx=0 (except of the case of previous item); * strangely enough, it is possible to read 14th block (which @@ -2987,8 +2940,8 @@ 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 + * 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 @@ -3098,11 +3051,11 @@ Remarks: The data of the graphics screen (the memory area which displays screen contents) are accessible to a program directly, without any system calls, through the selector gs: - mov eax, [gs:0] + mov eax, [gs:0] places in eax the first dword of the buffer, which contains information on color of the left upper point (and, possibly, colors of several following). - mov [gs:0], eax + mov [gs:0], eax by work in VESA modes with LFB sets color of the left upper point (and, possibly, colors of several following). To interpret the data of graphics screen program needs to know @@ -3260,59 +3213,6 @@ Remarks: Ralf Brown; registers of the second type must be listed in the device documentation. -====================================================================== -===================== Function 62, subfunction 11 ==================== -== Initialize user-accessible MMIO channel == -====================================================================== -Parameters: - * eax = 62 - function - * bl = 11 - subfunction - * cx = PCI-address (bbbbbbbb dddddfff) -Returns: - * eax = -1 - PCI access not granted; - * eax = -2 - no user MMIO access to this PCI address; - * eax = -3 - memory allocation error; otherwise - * eax = available user heap size. -Remarks: - * Low-level PCI access must be allowed (fn21:12) - * PCI-address should correspond the system var [mmio_pci_addr] - -====================================================================== -===================== Function 62, subfunction 12 ==================== -== Request user-accessible MMIO address space == -====================================================================== -Parameters: - * eax = 62 - function - * bl = 12 - subfunction - * bh = BAR number in PCI configuration space - * ecx = MMIO-block size needed (bytes) - * edx = MMIO-offset (number of whole 4Kb-pages!) -Returns: - * eax = -1 - user PCI access denied; - * eax = -2 - invalid BAR number; - * eax = -3 - BAR contains no valid IO addres; - * eax = -4 - BAR addresses IO ports; - * eax = -5 - dynamic allocation error; otherwise - * eax = MMIO start address (in application's linear space). -Remarks: - * Low-level PCI access must be allowed (fn21:12) - * The system var [mmio_pci_addr] sets the actual PCI-address - * The granted MMIO addresses should be released after use (fn62:13) - -====================================================================== -===================== Function 62, subfunction 13 ==================== -== Release a block of user MMIO addresses == -====================================================================== -Параметры: - * eax = 62 - function - * bl = 12 - subfunction - * ecx = MMIO start address (in application's linear space). -Returns: - * eax = 1 if the block is successfully released; - * eax = 0 in case of reallocation error; -Remarks: - * A valid uMMIO block should exist at this address (fn62:12) - ====================================================================== ============== Function 63 - work with the debug board. ============== ====================================================================== @@ -3421,7 +3321,6 @@ Remarks: ====================================================================== The input mode influences results of reading keys by function 2. When a program loads, ASCII input mode is set for it. -If subfunction is not support then eax=-1. -------------- Subfunction 1 - set keyboard input mode. -------------- Parameters: @@ -3670,7 +3569,7 @@ Remarks: ====================================================================== ===================== Function 68, subfunction 14 ==================== -====== Waiting delivering of signal from another program/driver ====== +============ Wait for signal from another program/driver. ============ ====================================================================== Parameters: * eax = 68 - function number @@ -3678,15 +3577,9 @@ Parameters: * ecx = pointer to the buffer for information (24 bytes) Returned value: * buffer pointed to by ecx contains the following information: - * +0: dword: identifier for underlying data of signal - * +4: data of signal (20 bytes), format of which is defining by - first dword - -====================================================================== -====== Function 68, subfunction 15 - set FPU exception handler. ====== -====================================================================== -Deleted (in current implementation only 0 is returned). -Using subfunctions 24, 25 is true. + * +0: dword: identifier for following data of signal + * +4: dword: data of signal (20 bytes), format of which is defined + by the first dword ====================================================================== ============= Function 68, subfunction 16 - load driver. ============= @@ -3720,22 +3613,12 @@ Parameters: * +16 = +0x10: dword: pointer to output data * +20 = +0x14: dword: size of output data Returned value: - * eax = error code - 0 - successful call - -1 - any error. - -2, -3, -4, etc. reserved for kernel error codes - 1, 2, 3, etc driver specific error codes + * eax = determined by driver Remarks: * Function codes and the structure of input/output data are defined by driver. * Previously one must obtain driver handle by subfunction 16. -====================================================================== -====== Function 68, subfunction 18 - set SSE exception handler. ====== -====================================================================== -Deleted (in current implementation only 0 is returned). -Using subfunctions 24, 25 is true. - ====================================================================== =============== Function 68, subfunction 19 - load DLL. ============== ====================================================================== @@ -3775,36 +3658,92 @@ Remarks: the new and old sizes. ====================================================================== -====== Function 68, subfunction 24 - set new exceptions handler ====== +======== Function 68, subfunction 22 - open named memory area. ======= +====================================================================== +Parameters: + * eax = 68 - function number + * ebx = 22 - subfunction number + * ecx = area name. Maximum of 31 characters with terminating zero + * edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS + * esi = flags for open and access: + * SHM_OPEN = 0x00 - open existing memory area. If an area + with such name does not exist, the function + will return error code 5. + * SHM_OPEN_ALWAYS = 0x04 - open existing or create new + memory area. + * SHM_CREATE = 0x08 - create new memory area. If an area + with such name already exists, the function + will return error code 10. + * SHM_READ = 0x00 - only read access + * SHM_WRITE = 0x01 - read and write access +Returned value: + * eax = pointer to memory area, 0 if error has occured + * if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS): + edx = 0 - success, otherwise - error code + * if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS): + edx = error code (if eax=0) or area size in bytes +Error codes: + * E_NOTFOUND = 5 + * E_ACCESS = 10 + * E_NOMEM = 30 + * E_PARAM = 33 +Remarks: + * Before this call one must initialize process heap by call to + subfunction 11. + * If a new area is created, access flags set maximal rights + for other processes. An attempt from other process to open + with denied rights will fail with error code E_ACCESS. + * The process which has created an area always has write access. + +====================================================================== +======= Function 68, subfunction 23 - close named memory area. ======= +====================================================================== +Parameters: + * eax = 68 - function number + * ebx = 23 - subfunction number + * ecx = area name. Maximum of 31 characters with terminating zero +Returned value: + * eax destroyed +Remarks: + * A memory area is physically freed (with deleting all data and + freeing physical memory), when all threads which have opened + this area will close it. + * When thread is terminating, all opened by it areas are closed. + +====================================================================== +======== Function 68, subfunction 24 - set exception handler. ======== ====================================================================== Parameters: * eax = 68 - function number * ebx = 24 - subfunction number * ecx = address of the new exception handler - * edx = the mask of processing exceptions + * edx = the mask of handled exceptions Returned value: * eax = address of the old exception handler (0, if it was not set) - * ebx = the old mask of exception handler + * ebx = the old mask of handled exceptions Remarks: - * Bit number in mask of exceptions is correspond to exception number - by CPU-specification (Intel-PC). For example, FPU-exception have - number 16 (#MF), and SSE-exception - 19 (#XF) - * The current implementation ignore the inquiry for hook of 7 - exception - system process #NM by one's own. - * User handler get exception number in stack parameter. So, correct - exit from handler is: RET 4. Return from handler is to the same - instruction, that was cause the exception - * When control is transfering to user handler, corresponding bit in - exception mask is clearing. Rising this exception in consequence - - reduce to default-handling. Exactly: terminating the application, - or suspending with debug-notify to owner. - * After completion of critical operations in user handler, it may be - rising corresponding bit in exception mask by using subfunction 25 - Clearing exceptions flags in FPU and/or XMM modules - is - responsibility of user handler too. + * Bit number in mask of exceptions corresponds to exception number + in CPU-specification (Intel-PC). For example, FPU exceptions have + number 16 (#MF), and SSE exceptions - 19 (#XF). + * The current implementation ignores the inquiry for hook of 7 + exception - the system handles #NM by its own. + * The exception handler is called with exception number as first + (and only) stack parameter. So, correct exit from the handler is + RET 4. It returns to the instruction, that caused the exception, + for faults, and to the next instruction for traps (see + classification of exceptions in CPU specification). + * When user handler receives control, the corresponding bit in + the exception mask is cleared. Raising this exception + in consequence leads to default handling, that is, + terminating the application in absence of debugger or + suspend with notification of debugger otherwise. + * After user handler completes critical operations, it can set + the corresponding bit in the exception mask with subfunction 25. + Also user handler is responsible for clearing exceptions flags in + FPU and/or SSE. ====================================================================== -==== Function 68, subfunction 25 - change state of signal activity === +====== Function 68, subfunction 25 - set FPU exception handler. ====== ====================================================================== Parameters: * eax = 68 - function number @@ -3812,14 +3751,15 @@ Parameters: * ecx = signal number * edx = value of activity (0/1) Returned value: - * eax = value of old activity for this signal (0/1) + * eax = -1 - invalid signal number + * otherwise eax = old value of activity for this signal (0/1) Remarks: - * In current implementation, it is changed only exception mask for - user exception handler, wich was previously set by subfunction 24. - At that, number of signal correspond to exception number. + * In current implementation only mask for user excepton handler, + which has been previously set by subfunction 24, + is changed. Signal number corresponds to exception number. ====================================================================== -====================== Fucntion 69 - debugging. ====================== +====================== Function 69 - debugging. ====================== ====================================================================== A process can load other process as debugged by set of corresponding bit by call to subfunction 7 of function 70. @@ -3882,7 +3822,7 @@ Remarks: and at arrival of new message the system will wait. For synchronization frame all work with the buffer by operations lock/unlock - neg [bufsize] + neg [bufsize] * Data in the buffer are considered as array of items with variable length - messages. Format of a message is explained in general description. @@ -4111,6 +4051,10 @@ Examples: * '/hd0/2/menuet/pics/tanzania.bmp',0 * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0 * '/sys/MySuperApp.ini',0 +Also function supports relative names. If the path begins not +with '/', it is considered relative to a current folder. To get or +set a current folder, use the function 30. + Available subfunctions: * subfunction 0 - read file * subfunction 1 - read folder