Difference between revisions of "Ru/api/kernel"

From KolibriOS wiki
Jump to navigation Jump to search
(Добавлено упоминание подфункции 31 функции 68. Добавлено нормальное название страницы.)
 
(51 intermediate revisions by 9 users not shown)
Line 1: Line 1:
''' СИСТЕМНЫЕ ФУНКЦИИ KolibriOS 0.7.7.0 '''
+
{{DISPLAYTITLE:API ядра}}
 +
 
 +
''' СИСТЕМНЫЕ ФУНКЦИИ KolibriOS'''
  
 
Номер функции помещается в регистр eax.
 
Номер функции помещается в регистр eax.
Line 5: Line 7:
 
Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются.
 
Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются.
  
 +
== Перечень функций ==
  
== Функция 0 - определить и нарисовать окно. ==
+
[[SysFn00/ru | Функция 0]] - определить и нарисовать окно.
 
 
Определяет окно приложения. Рисует рамку окна, заголовок и рабочую
 
область. Для окон со скином определяет стандартные кнопки закрытия и
 
минимизации.
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn00/ru | Функция 0]]
 
 
 
== Функция 1 - поставить точку в окне. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn01/ru | Функция 1]]
 
 
 
== Функция 2 - получить код нажатой клавиши. ==
 
 
 
Извлекает из буфера код нажатой клавиши.
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn02/ru | Функция 2]]
 
 
 
== Функция 3 - получить системное время. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn03/ru | Функция 3]]
 
 
 
== Функция 4 - вывести строку текста в окно. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn04/ru | Функция 4]]
 
 
 
== Функция 5 - пауза. ==
 
 
 
Задерживает выполнение программы на заданное время.
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn05/ru | Функция 5]]
 
 
 
== Функция 6 - прочитать файл с рамдиска. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn06/ru | Функция 6]]
 
 
 
== Функция 7 - вывести изображение в окно. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn07/ru | Функция 7]]
 
 
 
== Функция 8 - определить/удалить кнопку. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn08/ru | Функция 8]]
 
 
 
== Функция 9 - информация о потоке выполнения. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn09/ru | Функция 9]]
 
 
 
== Функция 10 - ожидать события. ==
 
 
 
Если очередь сообщений пуста, то ждет появления сообщения в очереди. В таком состоянии поток не получает процессорного времени. Затем считывает сообщение из очереди.
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn10/ru | Функция 10]]
 
 
 
== Функция 11 - проверить, есть ли событие, без ожидания. ==
 
 
 
Если в очереди сообщений есть какое-то событие, то считывает и
 
возвращает его. Если очередь пуста, возвращает нуль.
 
 
 
Описание функции перенесено в отдельную статью:  [[SysFn11/ru|Функция 11]]
 
 
 
== Функция 12 - начать/закончить перерисовку окна. ==
 
 
 
Подфункция 1 - начать перерисовку окна.
 
Подфункция 2 - закончить перерисовку окна.
 
 
 
Перенесены в отдельную статью: [[SysFn12/ru|Функция 12]]
 
 
 
== Функция 13 - нарисовать прямоугольник в окне. ==
 
 
 
Функция перенесена в статью [[SysFn13/ru|Функция 13]]
 
 
 
== Функция 14 - получить размеры экрана. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn14/ru|Функция 14]]
 
 
 
== Функция 15 - работа с фоновой графикой ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn15/ru | Функция 15]]
 
 
 
== Функция 16 - сохранить рамдиск на дискету. ==
 
 
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn16/ru|Функция 16]]
 
 
 
== Функция 17 - получить код нажатой кнопки. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn17/ru|Функция 17]]
 
 
 
== Функция 18 - системные настройки и информация == 
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn18/ru|Функция 18]]
 
 
 
== Функция 20 - интерфейс MIDI. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn20/ru|Функция 20]]
 
 
 
== Функция 21 - установка системных параметров ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn21/ru|Функция 21]]
 
 
 
== Функция 22 - установить системную дату/время. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn22/ru|Функция 22]]
 
 
 
== Функция 23 - ожидать события с таймаутом. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn23/ru|Функция 23]]
 
 
 
== Функция 24 - работа с проигрывателем компакт-дисков ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn24/ru|Функция 24]]
 
 
 
== Функция 25 - установить громкость SBPro. ==
 
 
 
''Удалена''
 
 
 
== Функция 26 - аппаратный сервис ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn26/ru|Функция 26]]
 
 
 
== Функция 27  ==
 
 
 
сведения об этой функции отсутствуют
 
 
 
== Функция 28 - установить громкость SB16. ==
 
 
 
Удалена
 
 
 
== Функция 29 - получить системную дату. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn29/ru|Функция 29]]
 
 
 
== Функция 30 - работа с текущей папкой. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn30/ru|Функция 30]]
 
 
 
== Функция 31  ==
 
 
 
сведения об этой функции отсутствуют
 
 
 
== Функция 32  ==
 
 
 
Системная функция с этим номером использовалась в ранних версиях КОС для удаления файла с рамдиска.
 
'''удалена'''
 
 
 
== Функция 33  ==
 
 
 
Системная функция с этим номером использовалась в ранних версиях КОС для записи файла на рамдиск.
 
'''удалена'''
 
 
 
== Функция 34  ==
 
 
 
сведения об этой функции отсутствуют
 
 
 
== Функция 35 - прочитать цвет точки на экране. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn35/ru|Функция 35]]
 
 
 
== Функция 36 - прочитать область экрана. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn36/ru|Функция 36]]
 
 
 
== Функция 37 - работа с мышью. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn37/ru|Функция 37]]
 
 
 
== Функция 38 - нарисовать отрезок. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn38/ru|Функция 38]]
 
 
 
== Функция 39 - чтение фона. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn39/ru|Функция 39]]
 
 
 
== Функция 40 - установить маску для ожидаемых событий. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn40/ru|Функция 40]]
 
 
 
== Функция 41 - узнать владельца IRQ. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn41/ru|Функция 41]]
 
 
 
== Функция 42 - работа с данными, полученными по IRQ. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn42/ru|Функция 42]]
 
 
 
== Функция 43 - ввод/вывод в порт. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn43/ru|Функция 43]]
 
 
 
== Функция 44 - определить действия при поступлении IRQ. ==
 
  
Описание функции перенесено в отдельную статью: [[SysFn44/ru|Функция 44]]
+
[[SysFn01/ru | Функция 1]] - поставить точку в окне.
  
== Функция 45 - зарезервировать/освободить IRQ. ==
+
[[SysFn02/ru | Функция 2]] - получить код нажатой клавиши.
  
Описание функции перенесено в отдельную статью: [[SysFn45/ru|Функция 45]]
+
[[SysFn03/ru | Функция 3]] - получить системное время.
  
== Функция 46 - зарезервировать/освободить группу портов ввода/вывода.==
+
[[SysFn04/ru | Функция 4]] - вывести строку текста в окно.
  
'''Внимание:''' Эта функция устарела и может быть удалена в следующих версиях ядра.  
+
[[SysFn05/ru | Функция 5]] - пауза.
  
Описание функции перенесено в отдельную статью: [[SysFn46/ru|Функция 46]]
+
[[SysFn07/ru | Функция 7]] - вывести изображение в окно.
  
== Функция 47 - вывести число в окно. ==
+
[[SysFn08/ru | Функция 8]] - определить/удалить кнопку.
  
Описание функции перенесено в отдельную статью: [[SysFn47/ru|Функция 47]]
+
[[SysFn09/ru | Функция 9]] - информация о потоке выполнения.
  
== Функция 48 - стили отображения окон ==
+
[[SysFn10/ru | Функция 10]] - ожидать события.
  
Описание функции перенесено в отдельную статью: [[SysFn48/ru|Функция 48]]
+
[[SysFn11/ru|Функция 11]] - проверить, есть ли событие, без ожидания.
  
== Функция 49 - Advanced Power Management (APM). ==
+
[[SysFn12/ru|Функция 12]] - начать/закончить перерисовку окна.
 +
* Подфункция 1 - начать перерисовку окна.
 +
* Подфункция 2 - закончить перерисовку окна.
  
Описание функции перенесено в отдельную статью: [[SysFn49/ru|Функция 49]]
+
[[SysFn13/ru|Функция 13]] - нарисовать прямоугольник в окне.
  
== Функция 50 - установка формы окна. ==
+
[[SysFn14/ru|Функция 14]] - получить размеры экрана.
  
Описание функции перенесено в отдельную статью: [[SysFn50/ru|Функция 50]]
+
[[SysFn15/ru | Функция 15]] - работа с фоновой графикой
 +
* Подфункция 1 - установить размер фонового изображения.
 +
* Подфункция 2 - поставить точку на фоновом изображении.
 +
* Подфункция 3 - перерисовать фон.
 +
* Подфункция 4 - установить режим отрисовки фона.
 +
* Подфункция 5 - поместить блок пикселей на фон.
 +
* Подфункция 6 - спроецировать данные фона на адресное пространство процесса.
 +
* Подфункция 7 - закрыть проекцию данных фона на адресное пространство процесса.
 +
* Подфункция 8 - получить координаты последней отрисовки фона.
 +
* Подфункция 9 - перерисовать прямоугольную часть фона.
  
== Функция 51 - создать поток. ==
+
[[SysFn16/ru|Функция 16]] - сохранить рамдиск на дискету.
  
Описание функции перенесено в отдельную статью: [[SysFn51/ru|Функция 51]]
+
[[SysFn17/ru|Функция 17]] - получить код нажатой кнопки.
  
== Функция 52 - сетевой сервис. ==
+
[[SysFn18/ru|Функция 18]] - системные настройки и информация
 +
* Подфункция 1 - сделать неактивным окно потока
 +
* Подфункция 2 - завершить процесс/поток по слоту.
 +
* Подфункция 3 - сделать активным окно заданного потока.
 +
* Подфункция 4 - получить счётчик пустых тактов в секунду.
 +
* Подфункция 5 - получить тактовую частоту.
 +
* Подфункция 6 - сохранить рамдиск в файл на жёстком диске.
 +
* Подфункция 7 - получить номер активного окна.
 +
* Подфункция 8 - отключить/разрешить звук спикера.
 +
* Подфункция 9 - завершение работы системы с параметром.
 +
* Подфункция 10 - свернуть окно приложения.
 +
* Подфункция 11 - получить информацию о дисковой подсистеме.
 +
* Подфункция 13 - получить версию ядра.
 +
* Подфункция 14 - ожидать начала обратного хода луча развёртки монитора.
 +
* Подфункция 15 - поместить курсор мыши в центр экрана.
 +
* Подфункция 16 - Получить размер свободной оперативной памяти.
 +
* Подфункция 17 - получить размер имеющейся оперативной памяти.
 +
* Подфункция 18 - завершить процесс/поток по идентификатору.
 +
* Подфункция 19 - получить/установить настройки мыши.
 +
* Подфункция 20 - получить информацию об оперативной памяти.
 +
* Подфункция 21 - получить номер слота процесса/потока по идентификатору.
 +
* Подфункция 22 - операции с окном другого процесса/потока.
 +
* Подфункция 23 - минимизировать все окна.
 +
* Подфункция 24 - установить пределы отрисовки.
 +
* Подфункция 25 - управление положением окна относительно других окон.
  
Описание функции перенесено в отдельную статью: [[SysFn52/ru|Функция 52]]
+
[[SysFn20/ru|Функция 20]] - интерфейс MIDI.
 +
* Подфункция 1 - сброс
 +
* Подфункция 2 - вывести байт
  
== Функция 53 - работа с сетевым сокетами. ==
+
[[SysFn21/ru|Функция 21]] - установка системных параметров
 +
* Подфункция 1 - установить базовый порт MPU MIDI.
 +
* Подфункция 2 - установить раскладку клавиатуры.
 +
* Подфункция 5 - установить язык системы.
 +
* Подфункция 11 - разрешить/запретить низкоуровневый доступ к HD.
 +
* Подфункция 12 - разрешить/запретить низкоуровневый доступ к PCI.
  
Описание функции перенесено в отдельную статью: [[SysFn53/ru|Функция 53]]
+
[[SysFn22/ru|Функция 22]] - установить системную дату/время.
  
== Функция 54  ==
+
[[SysFn23/ru|Функция 23]] - ожидать события с таймаутом.
  
Описание сисфункции с этим номером отсутствует.
+
[[SysFn24/ru|Функция 24]] - работа с проигрывателем компакт-дисков.
 +
* Подфункция 4 - извлечь лоток привода диска.
 +
* Подфункция 5 - загрузить лоток привода диска.
  
== Функция 55 - аудио сервис. ==
+
[[SysFn25/ru|Функция 25]] - записать область на слой фона.
  
=== Подфункция 0 - загрузить данные для SB16. ===
+
[[SysFn26/ru|Функция 26]] - аппаратный сервис.
 +
* Подфункция 1 - получить базовый порт MPU MIDI.
 +
* Подфункция 2 - получить раскладку клавиатуры.
 +
* Подфункция 5 - получить язык системы.
 +
* Подфункция 9 - получить значение счётчика времени.
 +
* Подфункция 10 - получить значение высокоточного счётчика времени.
 +
* Подфункция 11 - узнать, разрешён ли низкоуровневый доступ к HD.
 +
* Подфункция 12 - узнать, разрешён ли низкоуровневый доступ к PCI.
  
Параметры:
+
[[SysFn29/ru|Функция 29]] - получить системную дату.
  * eax = 55 - номер функции
 
  * ebx = 0 - номер подфункции
 
  * ecx = указатель на данные (копируется 64 килобайта, используется
 
    столько, сколько установлено подфункцией 2)
 
Возвращаемое значение:
 
  * функция не возвращает значения
 
Замечания:
 
  * Формат и размер данных устанавливаются подфункцией 2.
 
  
 +
[[SysFn30/ru|Функция 30]] - работа с текущей папкой.
 +
* Подфункция 1 - установить текущую папку для потока.
 +
* Подфункция 2 - получить активную папку для потока.
 +
* Подфункция 3 - установить доп. системную директорию для ядра.
 +
* Подфункция 4 - установить текущую папку с указанием кодировки.
 +
* Подфункция 5 - получить текущую папку с указанием кодировки.
  
=== Подфункция 1 - начать проигрывать данные на SB16. ===
+
[[SysFn34/ru|Функция 34]] - узнать кому принадлежит точка экрана.
  
Параметры:
+
[[SysFn35/ru|Функция 35]] - прочитать цвет точки на экране.
  * eax = 55 - номер функции
 
  * ebx = 1 - номер подфункции
 
Возвращаемое значение:
 
  * функция не возвращает значения
 
Замечания:
 
  * Предварительно данные должны быть загружены подфункцией 0 и
 
    определён их формат подфункцией 2.
 
  * Функция возвращает управление, когда началось проигрывание данных;
 
    после этого проигрывание идёт независимо от приложения (и вообще
 
    не требует загрузки процессора).
 
  * Предварительно должны быть определены базовый порт SB16
 
    (подфункцией 4 функции 21) и канал DMA
 
    (подфункцией 10 функции 21).
 
  
 +
[[SysFn36/ru|Функция 36]] - прочитать область экрана.
  
=== Подфункция 2 - установить формат данных SB16. ===
+
[[SysFn37/ru|Функция 37]] - работа с мышью.
 +
* Подфункция 0 - экранные координаты мыши
 +
* Подфункция 1 - координаты мыши относительно окна
 +
* Подфункция 2 - состояния кнопок мыши
 +
* Подфункция 3 - состояния и события кнопок мыши
 +
* Подфункция 4 - загрузить курсор
 +
* Подфункция 5 - установить курсор
 +
* Подфункция 6 - удалить курсор
 +
* Подфункция 7 - данные прокрутки
 +
* Подфункция 8 - загрузить курсор с указанием кодировки
  
Параметры:
+
[[SysFn38/ru|Функция 38]] - нарисовать отрезок.
  * eax = 55 - номер функции
 
  * ebx = 2 - номер подфункции
 
  * ecx = 0 - установить разрядность
 
    * edx = 1 - 8бит моно
 
    * edx = 2 - 8бит стерео
 
  * ecx = 1 - установить размер данных
 
    * edx = размер в байтах
 
  * ecx = 2 - установить частоту проигрывания
 
    * edx = частота
 
Возвращаемое значение:
 
  * функция не возвращает значения
 
Замечания:
 
  * При загрузке системы устанавливаются следующие параметры
 
    по умолчанию: разрядность - 8 бит моно, размер - 64 Кб,
 
    частота 44100 Гц. Тем не менее рекомендуется явно устанавливать
 
    необходимые значения, поскольку они могли быть переустановлены
 
    какой-нибудь программой.
 
  
 +
[[SysFn39/ru|Функция 39]] - чтение фона.
 +
* Подфункция 1 - получить размер фонового изображения.
 +
* Подфункция 2 - прочитать точку с фонового изображения.
 +
* Подфункция 4 - получить режим отрисовки фона.
  
=== Подфункция 55 - начать проигрывать данные на встроенном спикере. ===
+
[[SysFn40/ru|Функция 40]] - установить маску для ожидаемых событий.
  
Параметры:
+
[[SysFn43/ru|Функция 43]] - ввод/вывод в порт.
  * eax = 55 - номер функции
 
  * ebx = 55 - номер подфункции
 
  * esi = указатель на данные
 
Возвращаемое значение:
 
  * eax = 0 - успешно
 
  * eax = 55 - ошибка (спикер отключён или занят)
 
Данные - это массив элементов переменной длины.
 
Формат каждого элемента определяется первым байтом:
 
  * 0 = конец данных
 
  * 1..0x80 = задаёт длительность звучания в сотых долях секунды
 
    ноты, определяемой непосредственным значением частоты
 
    * следующее слово (2 байта) содержит делитель частоты;
 
      частота определяется как 1193180/divider
 
  * 0x81 = invalid
 
  * 0x82..0xFF = нота, определяемая октавой и номером:
 
    * длительность в сотых долях секунды = (первый байт)-0x81
 
    * присутствует ещё один байт;
 
    * (второй байт)=0xFF - пауза
 
    * иначе он имеет вид a*0x10+b, где b=номер ноты в октаве от 1
 
      до 12, a=номер октавы (считая с 0)
 
Замечания:
 
  * Пищание спикером может быть запрещено/разрешено подфункцией 8
 
    функции 18.
 
  * Функция возвращает управление, сообщив куда следует информацию
 
    о запросе. Само проигрывание идёт независимо от программы.
 
  * Данные должны сохраняться в памяти по крайней мере
 
    до конца проигрывания.
 
  
 +
[[SysFn46/ru|Функция 46]] - зарезервировать/освободить группу портов ввода/вывода.
  
== Функция 57 - PCI BIOS. ==
+
[[SysFn47/ru|Функция 47]] - вывести число в окно.
  
Параметры:
+
[[SysFn48/ru|Функция 48]] - стили отображения окон
  * eax = 57 - номер функции
+
* Подфункция 0 - применить настройки экрана.
  * ebp соответствует регистру al в спецификации PCI BIOS
+
* Подфункция 1 - установить стиль кнопок.
  * остальные регистры - по спецификации PCI BIOS
+
* Подфункция 2 - установить стандартные цвета окон.
Возвращаемое значение:
+
* Подфункция 3 - получить стандартные цвета окон.
  * CF не определён
+
* Подфункция 4 - получить высоту скина.
  * остальные регистры - по спецификации PCI BIOS
+
* Подфункция 5 - получить рабочую область экрана.
Замечания:
+
* Подфункция 6 - установить рабочую область экрана.
  * Многих результатов этой функции можно также добиться вызовом
+
* Подфункция 7 - получить область скина для текста заголовка.
    соответствующих подфункций функции 62.
+
* Подфункция 8 - установить используемый скин окон.
  * Функция вызывает расширение PCI32 BIOS, документированное,
+
* Подфункция 9 - получить настройку сглаживания шрифтов.
    например, в http://alpha1.dyns.net/files/PCI/bios21.pdf.
+
* Подфункция 10 - настроить сглаживание шрифтов.
  * Если BIOS не поддерживает это расширение, поведение функции
+
* Подфункция 11 - получить размер шрифтов.
    эмулируется (через аналоги подфункций функции 62 режима ядра).
+
* Подфункция 12 - установить размер шрифтов.
 +
* Подфункция 13 - установить скин с указанием кодировки.
  
 +
[[SysFn49/ru|Функция 49]] - Advanced Power Management (APM).
  
== Функция 58 - работа с файловой системой. ==
+
[[SysFn50/ru|Функция 50]] - установка формы окна.
  
Параметры:
+
[[SysFn51/ru|Функция 51]] - создать поток.
  * 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 - получение информации о файловой системе
 
  
 +
[[SysFn54/ru|Функция 54]] - работа с буфером обмена
 +
* Подфункция 0 - узнать количество слотов в буфере обмена.
 +
* Подфункция 1 - считать данные из буфера обмена.
 +
* Подфункция 2 - записать данные в буфер обмена.
 +
* Подфункция 3 - удалить последний слот с данными в буфере обмена
 +
* Подфункция 4 - аварийный сброс блокировки буфера
  
=== Подфункция 0 - прочитать файл/папку. ===
+
[[SysFn55/ru | Функция 55]] - встроенный спикер.
  
Параметры:
+
[[SysFn57/ru | Функция 57]] - PCI BIOS.
  * 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.
 
  
 +
[[SysFn60/ru | Функция 60]] - Inter Process Communication (IPC).
 +
* Подфункция 1 - установить область для получения IPC
 +
* Подфункция 2 - послать сообщение IPC
  
=== Подфункция 8 - LBA-чтение с устройства. ===
+
[[SysFn61/ru | Функция 61]] - получить параметры для прямого доступа к графике.
 
+
* Подфункция 1 - разрешение экрана
Параметры:
+
* Подфункция 2 - число бит на пиксель
  * eax = 58 - номер функции
+
* Подфункция 3 - число байт на строку
  * 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). ==
 
 
 
IPC применяется для посылок сообщений от одного процесса/потока
 
другому. При этом следует предварительно договориться о том, как
 
интерпретировать конкретное сообщение.
 
 
 
=== Подфункция 1 - установить область для получения IPC ===
 
Вызывается процессом-приёмником.
 
Параметры:
 
  * eax = 60 - номер функции
 
  * ebx = 1 - номер подфункции
 
  * ecx = указатель на буфер
 
  * edx = размер буфера
 
Возвращаемое значение:
 
  * eax = 0 - всегда успешно
 
Формат IPC-буфера:
 
  * +0: dword: если здесь не 0, то буфер считается заблокированным;
 
    блокируйте/разблокируйте буфер, когда вы с ним активно работаете
 
    и вам надо, чтобы извне не изменялись данные буфера
 
    (не поступали новые сообщения)
 
  * +4: dword: занято места в буфере (в байтах)
 
  * +8: первое сообщение
 
  * +8+n: второе сообщение
 
  * ...
 
Формат сообщения:
 
  * +0: dword: PID процесса/потока, пославшего сообщение
 
  * +4: dword: длина сообщения (не считая этот заголовок)
 
  * +8: n*byte: данные сообщения
 
 
 
=== Подфункция 2 - послать сообщение IPC. ===-
 
Вызывается процессом-инициатором.
 
Параметры:
 
  * eax = 60 - номер функции
 
  * ebx = 2 - номер подфункции
 
  * ecx = PID приёмника
 
  * edx = указатель на данные сообщения
 
  * esi = длина сообщения (в байтах)
 
Возвращаемое значение:
 
  * eax = 0 - успешно
 
  * eax = 1 - приёмник не определил буфер для IPC-сообщений
 
    (может быть, ещё не успел, а может быть, это не тот поток,
 
    который нужен)
 
  * eax = 2 - приёмник заблокировал IPC-буфер;
 
    попробуйте немного подождать
 
  * eax = 3 - переполнение IPC-буфера приёмника
 
  * eax = 4 - процесса/потока с таким PID не существует
 
Замечания:
 
  * Система сразу после записи IPC-сообщения в буфер посылает
 
    потоку-приёмнику событие с кодом 7 (см. коды событий).
 
 
 
 
 
== Функция 61 - получить параметры для прямого доступа к графике. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn61/ru | Функция 61]]
 
 
 
== Функция 62 - пользовательский доступ к PCI. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn62/ru|Функция 62]]
 
  
 +
[[SysFn62/ru|Функция 62]] - пользовательский доступ к PCI.
 
* Подфункция 0 - получить версию PCI-интерфейса.
 
* Подфункция 0 - получить версию PCI-интерфейса.
 
* Подфункция 1 - получить номер последней PCI-шины.
 
* Подфункция 1 - получить номер последней PCI-шины.
Line 627: Line 199:
 
* подфункции 4,5,6 - прочитать PCI-регистр.
 
* подфункции 4,5,6 - прочитать PCI-регистр.
 
* подфункции 8,9,10 - записать в PCI-регистр.
 
* подфункции 8,9,10 - записать в PCI-регистр.
* подфункция 11 - инициализировать доступ к MMIO
 
* подфункция 12 - получить линейный адрес MMIO-блока
 
* подфункция 13 - освободить линейные адреса MMIO
 
 
== Функция 63 - работа с доской отладки. ==
 
 
Описание функции перенесено в отдельную статью: [[SysFn63/ru|Функция 63]]
 
  
== Функция 64 - перераспределить память приложения. ==
+
[[SysFn63/ru|Функция 63]] - работа с доской отладки.
 +
* Подфункция 1 - запись байта
 +
* Подфункция 2 - чтение байта
  
Описание функции перенесено в отдельную статью: [[SysFn64/ru|Функция 64]]
+
[[SysFn64/ru|Функция 64]] - перераспределить память приложения.
  
== Функция 65 - вывести изображение с палитрой в окно. ==
+
[[SysFn65/ru|Функция 65]] - вывести изображение с палитрой в окно.
 
 
Описание функции перенесено в отдельную статью: [[SysFn65/ru|Функция 65]]
 
 
 
== Функция 66 - работа с клавиатурой. ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn66/ru|Функция 66]]
 
  
 +
[[SysFn66/ru|Функция 66]] - работа с клавиатурой.
 
* Подфункция 1 - установить режим ввода с клавиатуры.
 
* Подфункция 1 - установить режим ввода с клавиатуры.
 
* Подфункция 2 - получить режим ввода с клавиатуры.
 
* Подфункция 2 - получить режим ввода с клавиатуры.
Line 652: Line 214:
 
* Подфункция 4 - установить общесистемную "горячую клавишу".
 
* Подфункция 4 - установить общесистемную "горячую клавишу".
 
* Подфункция 5 - удалить установленную "горячую клавишу".
 
* Подфункция 5 - удалить установленную "горячую клавишу".
 +
* Подфункция 6 - заблокировать обычный ввод.
 +
* Подфункция 7 - разблокировать обычный ввод.
  
== Функция 67 - изменить положение/размеры окна. ==
+
[[SysFn67/ru|Функция 67]] - изменить положение/размеры окна.
 
 
Описание функции перенесено в отдельную статью: [[SysFn67/ru|Функция 67]]
 
 
 
== Функция 68 - внутренние системные службы ==
 
 
 
Описание функции перенесено в отдельную статью: [[SysFn68/ru|Функция 68]]
 
 
 
*Подфункция 0 - получить счётчик переключений задач.
 
*Подфункция 1 - переключиться на следующий поток выполнения.
 
*Подфункция 2 - кэш + rdpmc.
 
*Подфункция 3 - прочитать MSR-регистр.
 
*Подфункция 4 - записать в MSR-регистр.
 
*Подфункция 11 - инициализировать кучу процесса.
 
*Подфункция 12 - выделить блок памяти.
 
*Подфункция 13 - освободить блок памяти.
 
*Подфункция 14 - ожидать извещения от драйвера.
 
*Подфункция 15 - установить обработчик исключений FPU.
 
*Подфункция 16 - загрузить драйвер.
 
*Подфункция 17 - управление драйвером.
 
*Подфункция 18 - установить обработчик исключений SSE.
 
*Подфункция 19 - загрузить DLL.
 
*Подфункция 20 - перераспределить блок памяти.
 
*Подфункция 22 - открыть именованую область памяти.
 
*Подфункция 23 - закрыть именованую область памяти.
 
 
 
== Функция 69 - отладка. ==
 
  
Описание функции перенесено в отдельную статью: [[SysFn69/ru|Функция 69]]
+
[[SysFn68/ru|Функция 68]] - внутренние системные службы.
 +
* Подфункция 0 - получить счётчик переключений задач.
 +
* Подфункция 1 - переключиться на следующий поток выполнения.
 +
* Подфункция 2 - кэш + rdpmc.
 +
* Подфункция 3 - прочитать MSR-регистр.
 +
* Подфункция 4 - записать в MSR-регистр.
 +
* Подфункция 11 - инициализировать кучу процесса.
 +
* Подфункция 12 - выделить блок памяти.
 +
* Подфункция 13 - освободить блок памяти.
 +
* Подфункция 14 - ожидать извещения от драйвера.
 +
* Подфункция 16 - загрузить драйвер.
 +
* Подфункция 17 - управление драйвером.
 +
* Подфункция 18 - загрузить DLL с указанием кодировки.
 +
* Подфункция 19 - загрузить DLL.
 +
* Подфункция 20 - перераспределить блок памяти.
 +
* Подфункция 22 - открыть именованую область памяти.
 +
* Подфункция 23 - закрыть именованую область памяти.
 +
* Подфункция 24 - установить обработчик исключений
 +
* Подфункция 25 - изменить состояние активности сигнала
 +
* Подфункция 26 - освободить страницы памяти
 +
* Подфункция 27 - загузить файл
 +
* Подфункция 28 - загрузить файл с указанием кодировки
 +
* Подфункция 31 - получить данные драйвера
  
 +
[[SysFn69/ru|Функция 69]] - отладка.
 
*Подфункция 0 - определить область данных для отладочных сообщений.
 
*Подфункция 0 - определить область данных для отладочных сообщений.
 
*Подфункция 1 - получить состояние регистров отлаживаемого потока.
 
*Подфункция 1 - получить состояние регистров отлаживаемого потока.
Line 694: Line 255:
 
*Подфункция 9 - установить/снять аппаратную точку останова.
 
*Подфункция 9 - установить/снять аппаратную точку останова.
  
== Функция 70 - работа с файловой системой с поддержкой длинных имён. ==
+
[[SysFn70/ru|Функция 70]] - работа с файловой системой с поддержкой длинных имён.
 
 
Описание функции перенесено в отдельную статью: [[SysFn70/ru|Функция 70]]
 
 
 
 
* Подфункция 0 - чтение файла с поддержкой длинных имён.
 
* Подфункция 0 - чтение файла с поддержкой длинных имён.
 
* Подфункция 1 - чтение папки с поддержкой длинных имён.
 
* Подфункция 1 - чтение папки с поддержкой длинных имён.
Line 709: Line 267:
 
* Подфункция 9 - создание папки.
 
* Подфункция 9 - создание папки.
  
== Функция 72 - послать сообщение окну. ==
+
[[SysFn71/ru|Функция 71]] - параметры окна.
 +
 
 +
[[SysFn72/ru|Функция 72]] - послать сообщение окну.
 +
 
 +
[[SysFn73/ru|Функция 73]] - программный блиттер.
  
Описание функции перенесено в отдельную статью: [[SysFn72/ru|Функция 72]]
+
[[SysFn74/ru|Функция 74]] - работа с сетевыми устройствами.
 +
* Подфункция -1 - получить количество активных сетевых устройств.
 +
* Подфункция 0 - получить тип сетевого устройства.
 +
* Подфункция 1 - получить имя сетевого устройства.
 +
* Подфункция 2 - сброс сетевого устройства.
 +
* Подфункция 3 - остановить сетевое устройство.
 +
* Подфункция 4 - получить указатель на устройство.
 +
* Подфункция 6 - получить количество посланых пакетов.
 +
* Подфункция 7 - получить количество принятых пакетов.
 +
* Подфункция 8 - получить количество посланых байт.
 +
* Подфункция 9 - получить количество принятых байт.
 +
* Подфункция 10 - получить статус соединения.
  
Подфункция 1 - послать сообщение с параметром активному окну.
+
[[SysFn75/ru|Функция 75]] - работа с сетевым сокетами.
 +
* Подфункция 0 - Open socket (Открыть сокет).
 +
* Подфункция 1 - Close socket (Закрыть сокет).
 +
* Подфункция 2 - Bind (Привязка).
 +
* Подфункция 3 - Listen (Слушать).
 +
* Подфункция 4 - Connect (Соединение).
 +
* Подфункция 5 - Accept (Соглашение).
 +
* Подфункция 6 - Send (Послать).
 +
* Подфункция 7 - Receive (Получить).
 +
* Подфункция 8 - Set socket options (Задать опции сокета)
 +
* Подфункция 9 - Get socket options (Получить опции сокета)
 +
* Подфункция 10 - Get socketpair (Получить парный сокет).
  
== Функция -1 - завершить выполнение потока/процесса ==
+
[[SysFn76/ru|Функция 76]] - сетевые опции и статистика.
  
Описание функции перенесено в отдельную статью: [[SysFn-1/ru|Функция -1]]
+
[[SysFn77/ru|Функция 77]] - подсистема POSIX.
 +
* Подфункция 0 - Создать фьютекс
 +
* Подфункция 1 - Удалить фьютекс
 +
* Подфункция 2 - Ожидать
 +
* Подфункция 3 - Разбудить
 +
* Подфункция 4 - Зарезервирована
 +
* Подфункция 5 - Зарезервирована
 +
* Подфункция 6 - Зарезервирована
 +
* Подфункция 7 - Зарезервирована
 +
* Подфункция 8 - open(), пока не реализована
 +
* Подфункция 9 - close(), пока не реализована
 +
* Подфункция 10 - read(), чтение из файла в буфер
 +
* Подфункция 11 - write(), запись данных из буфера в файл
 +
* Подфункция 12 - dup3(), пока не реализована
 +
* Подфункция 13 - pipe2(), создание канала
 +
 
 +
[[SysFn80/ru|Функция 80]] - работа с файловой системой с указанием кодировки.
 +
 
 +
[[SysFn-1/ru|Функция -1]] - завершить выполнение потока/процесса.
  
 
== Список событий ==
 
== Список событий ==
  
Очередное событие можно получить вызовом одной из функций 10
+
Очередное событие можно получить вызовом одной из [[SysFn10/ru|функций 10]]
(ожидать события), 11 (проверить без ожидания), 23
+
(ожидать события), [[SysFn11/ru|11]] (проверить без ожидания), [[SysFn23/ru|23]]
 
(ожидать в течение заданного времени).
 
(ожидать в течение заданного времени).
 
Эти функции возвращают только те события, которые входят в маску,
 
Эти функции возвращают только те события, которые входят в маску,
устанавливаемую функцией 40. По умолчанию это первые три, чего
+
устанавливаемую [[SysFn40/ru|функцией 40]]. По умолчанию это первые три, чего
 
вполне достаточно для многих приложений.
 
вполне достаточно для многих приложений.
Коды событий:
+
''Коды событий:''
  * 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)
+
* 1 = сообщение о перерисовке (сбрасывается при вызове [[SysFn00/ru|функции 0]])
  * 2 = нажата клавиша на клавиатуре (поступает, только когда окно
+
* 2 = нажата клавиша на клавиатуре (поступает, только когда окно активно) или нажата "горячая клавиша";
    активно) или нажата "горячая клавиша";
+
** сбрасывается, когда все клавиши из буфера считаны [[SysFn02/ru|функцией 2]]
    сбрасывается, когда все клавиши из буфера считаны функцией 2
+
* 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка закрытия, созданная неявно функцией 0; кнопка минимизации обрабатывается системой и о ней сообщения не приходит;
  * 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка
+
** поступает, только когда окно активно;  
    закрытия, созданная неявно функцией 0; кнопка минимизации
+
** сбрасывается, когда все кнопки из буфера считаны [[SysFn17/ru|функцией 17]])
    обрабатывается системой и о ней сообщения не приходит;
+
* 4 = зарезервировано (в текущей реализации никогда не приходит даже при размаскировке [[SysFn40/ru|функцией 40]])
    поступает, только когда окно активно; сбрасывается, когда все
+
* 5 = перерисовывается фон рабочего стола (сбрасывается автоматически после перерисовки, так что если во время перерисовки фона программа не ждёт и не проверяет события, то этого события она не заметит)
    кнопки из буфера считаны функцией 17)
+
* 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
  * 4 = зарезервировано (в текущей реализации никогда не приходит даже
+
* 7 = произошло событие IPC (смотри [[SysFn60/ru|функцию 60]] - Inter Process Communication; сбрасывается при прочтении)
    при размаскировке функцией 40)
+
* 8 = произошло сетевое событие (сбрасывается при прочтении; смотри работу с сетью)
  * 5 = перерисовывается фон рабочего стола (сбрасывается
+
* 9 = произошло отладочное событие (сбрасывается при прочтении; смотри отладочную подсистему)
    автоматически после перерисовки, так что если во время перерисовки
+
* 16..31 - ранее использовались для проверки соответствующих IRQ (16=IRQ0, 31=IRQ15) (на новых версиях ядра не генерируются)
    фона программа не ждёт и не проверяет события, то этого события
 
    она не заметит)
 
  * 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши
 
    или перемещение; сбрасывается при прочтении)
 
  * 7 = произошло событие IPC (смотри функцию 60 - Inter Process
 
    Communication; сбрасывается при прочтении)
 
  * 8 = произошло сетевое событие (сбрасывается при прочтении;
 
    смотри работу с сетью)
 
  * 9 = произошло отладочное событие (сбрасывается при прочтении;
 
    смотри отладочную подсистему)
 
  * 16..31 = произошло событие с соответствующим IRQ
 
    (16=IRQ0, 31=IRQ15) (сбрасывается при считывании всех данных IRQ)
 
  
 +
== Коды ошибок файловой системы ==
  
== Коды ошибок файловой системы ==
+
* 0 = успешно
 +
* 2 = функция не поддерживается для данной файловой системы
 +
* 3 = неизвестная файловая система
 +
* 5 = файл не найден
 +
* 6 = файл закончился
 +
* 7 = указатель вне памяти приложения
 +
* 8 = диск заполнен
 +
* 9 = ошибка файловой системы
 +
* 10 = доступ запрещён
 +
* 11 = ошибка устройства
 +
* 12 = файловой системе недостаточно оперативной памяти
  
  * 0 = успешно
 
  * 1 = не определена база и/или раздел жёсткого диска (подфункциями
 
    7, 8 функции 21)
 
  * 2 = функция не поддерживается для данной файловой системы
 
  * 3 = неизвестная файловая система
 
  * 4 = зарезервировано, никогда не возвращается в текущей реализации
 
  * 5 = файл не найден
 
  * 6 = файл закончился
 
  * 7 = указатель вне памяти приложения
 
  * 8 = диск заполнен
 
  * 9 = таблица FAT разрушена
 
  * 10 = доступ запрещён
 
  * 11 = ошибка устройства
 
 
При запуске программы возможны также следующие коды ошибок:
 
При запуске программы возможны также следующие коды ошибок:
  * 30 = 0x1E = недостаточно памяти
+
* 30 = 0x1E = недостаточно памяти
  * 31 = 0x1F = файл не является исполнимым
+
* 31 = 0x1F = файл не является исполнимым
  * 32 = 0x20 = слишком много процессов
+
* 32 = 0x20 = слишком много процессов
  
 +
{{System_functions}}
 
[[Category:Coding]]
 
[[Category:Coding]]

Latest revision as of 16:12, 4 June 2022


СИСТЕМНЫЕ ФУНКЦИИ KolibriOS

Номер функции помещается в регистр eax. Вызов системной функции осуществляется командой "int 0x40". Все регистры, кроме явно указанных в возвращаемом значении, включая регистр флагов eflags, сохраняются.

Перечень функций

Функция 0 - определить и нарисовать окно.

Функция 1 - поставить точку в окне.

Функция 2 - получить код нажатой клавиши.

Функция 3 - получить системное время.

Функция 4 - вывести строку текста в окно.

Функция 5 - пауза.

Функция 7 - вывести изображение в окно.

Функция 8 - определить/удалить кнопку.

Функция 9 - информация о потоке выполнения.

Функция 10 - ожидать события.

Функция 11 - проверить, есть ли событие, без ожидания.

Функция 12 - начать/закончить перерисовку окна.

  • Подфункция 1 - начать перерисовку окна.
  • Подфункция 2 - закончить перерисовку окна.

Функция 13 - нарисовать прямоугольник в окне.

Функция 14 - получить размеры экрана.

Функция 15 - работа с фоновой графикой

  • Подфункция 1 - установить размер фонового изображения.
  • Подфункция 2 - поставить точку на фоновом изображении.
  • Подфункция 3 - перерисовать фон.
  • Подфункция 4 - установить режим отрисовки фона.
  • Подфункция 5 - поместить блок пикселей на фон.
  • Подфункция 6 - спроецировать данные фона на адресное пространство процесса.
  • Подфункция 7 - закрыть проекцию данных фона на адресное пространство процесса.
  • Подфункция 8 - получить координаты последней отрисовки фона.
  • Подфункция 9 - перерисовать прямоугольную часть фона.

Функция 16 - сохранить рамдиск на дискету.

Функция 17 - получить код нажатой кнопки.

Функция 18 - системные настройки и информация

  • Подфункция 1 - сделать неактивным окно потока
  • Подфункция 2 - завершить процесс/поток по слоту.
  • Подфункция 3 - сделать активным окно заданного потока.
  • Подфункция 4 - получить счётчик пустых тактов в секунду.
  • Подфункция 5 - получить тактовую частоту.
  • Подфункция 6 - сохранить рамдиск в файл на жёстком диске.
  • Подфункция 7 - получить номер активного окна.
  • Подфункция 8 - отключить/разрешить звук спикера.
  • Подфункция 9 - завершение работы системы с параметром.
  • Подфункция 10 - свернуть окно приложения.
  • Подфункция 11 - получить информацию о дисковой подсистеме.
  • Подфункция 13 - получить версию ядра.
  • Подфункция 14 - ожидать начала обратного хода луча развёртки монитора.
  • Подфункция 15 - поместить курсор мыши в центр экрана.
  • Подфункция 16 - Получить размер свободной оперативной памяти.
  • Подфункция 17 - получить размер имеющейся оперативной памяти.
  • Подфункция 18 - завершить процесс/поток по идентификатору.
  • Подфункция 19 - получить/установить настройки мыши.
  • Подфункция 20 - получить информацию об оперативной памяти.
  • Подфункция 21 - получить номер слота процесса/потока по идентификатору.
  • Подфункция 22 - операции с окном другого процесса/потока.
  • Подфункция 23 - минимизировать все окна.
  • Подфункция 24 - установить пределы отрисовки.
  • Подфункция 25 - управление положением окна относительно других окон.

Функция 20 - интерфейс MIDI.

  • Подфункция 1 - сброс
  • Подфункция 2 - вывести байт

Функция 21 - установка системных параметров

  • Подфункция 1 - установить базовый порт MPU MIDI.
  • Подфункция 2 - установить раскладку клавиатуры.
  • Подфункция 5 - установить язык системы.
  • Подфункция 11 - разрешить/запретить низкоуровневый доступ к HD.
  • Подфункция 12 - разрешить/запретить низкоуровневый доступ к PCI.

Функция 22 - установить системную дату/время.

Функция 23 - ожидать события с таймаутом.

Функция 24 - работа с проигрывателем компакт-дисков.

  • Подфункция 4 - извлечь лоток привода диска.
  • Подфункция 5 - загрузить лоток привода диска.

Функция 25 - записать область на слой фона.

Функция 26 - аппаратный сервис.

  • Подфункция 1 - получить базовый порт MPU MIDI.
  • Подфункция 2 - получить раскладку клавиатуры.
  • Подфункция 5 - получить язык системы.
  • Подфункция 9 - получить значение счётчика времени.
  • Подфункция 10 - получить значение высокоточного счётчика времени.
  • Подфункция 11 - узнать, разрешён ли низкоуровневый доступ к HD.
  • Подфункция 12 - узнать, разрешён ли низкоуровневый доступ к PCI.

Функция 29 - получить системную дату.

Функция 30 - работа с текущей папкой.

  • Подфункция 1 - установить текущую папку для потока.
  • Подфункция 2 - получить активную папку для потока.
  • Подфункция 3 - установить доп. системную директорию для ядра.
  • Подфункция 4 - установить текущую папку с указанием кодировки.
  • Подфункция 5 - получить текущую папку с указанием кодировки.

Функция 34 - узнать кому принадлежит точка экрана.

Функция 35 - прочитать цвет точки на экране.

Функция 36 - прочитать область экрана.

Функция 37 - работа с мышью.

  • Подфункция 0 - экранные координаты мыши
  • Подфункция 1 - координаты мыши относительно окна
  • Подфункция 2 - состояния кнопок мыши
  • Подфункция 3 - состояния и события кнопок мыши
  • Подфункция 4 - загрузить курсор
  • Подфункция 5 - установить курсор
  • Подфункция 6 - удалить курсор
  • Подфункция 7 - данные прокрутки
  • Подфункция 8 - загрузить курсор с указанием кодировки

Функция 38 - нарисовать отрезок.

Функция 39 - чтение фона.

  • Подфункция 1 - получить размер фонового изображения.
  • Подфункция 2 - прочитать точку с фонового изображения.
  • Подфункция 4 - получить режим отрисовки фона.

Функция 40 - установить маску для ожидаемых событий.

Функция 43 - ввод/вывод в порт.

Функция 46 - зарезервировать/освободить группу портов ввода/вывода.

Функция 47 - вывести число в окно.

Функция 48 - стили отображения окон

  • Подфункция 0 - применить настройки экрана.
  • Подфункция 1 - установить стиль кнопок.
  • Подфункция 2 - установить стандартные цвета окон.
  • Подфункция 3 - получить стандартные цвета окон.
  • Подфункция 4 - получить высоту скина.
  • Подфункция 5 - получить рабочую область экрана.
  • Подфункция 6 - установить рабочую область экрана.
  • Подфункция 7 - получить область скина для текста заголовка.
  • Подфункция 8 - установить используемый скин окон.
  • Подфункция 9 - получить настройку сглаживания шрифтов.
  • Подфункция 10 - настроить сглаживание шрифтов.
  • Подфункция 11 - получить размер шрифтов.
  • Подфункция 12 - установить размер шрифтов.
  • Подфункция 13 - установить скин с указанием кодировки.

Функция 49 - Advanced Power Management (APM).

Функция 50 - установка формы окна.

Функция 51 - создать поток.

Функция 54 - работа с буфером обмена

  • Подфункция 0 - узнать количество слотов в буфере обмена.
  • Подфункция 1 - считать данные из буфера обмена.
  • Подфункция 2 - записать данные в буфер обмена.
  • Подфункция 3 - удалить последний слот с данными в буфере обмена
  • Подфункция 4 - аварийный сброс блокировки буфера

Функция 55 - встроенный спикер.

Функция 57 - PCI BIOS.

Функция 60 - Inter Process Communication (IPC).

  • Подфункция 1 - установить область для получения IPC
  • Подфункция 2 - послать сообщение IPC

Функция 61 - получить параметры для прямого доступа к графике.

  • Подфункция 1 - разрешение экрана
  • Подфункция 2 - число бит на пиксель
  • Подфункция 3 - число байт на строку

Функция 62 - пользовательский доступ к PCI.

  • Подфункция 0 - получить версию PCI-интерфейса.
  • Подфункция 1 - получить номер последней PCI-шины.
  • Подфункция 2 - Получить механизм обращения к конфигурационному пространству PCI.
  • подфункции 4,5,6 - прочитать PCI-регистр.
  • подфункции 8,9,10 - записать в PCI-регистр.

Функция 63 - работа с доской отладки.

  • Подфункция 1 - запись байта
  • Подфункция 2 - чтение байта

Функция 64 - перераспределить память приложения.

Функция 65 - вывести изображение с палитрой в окно.

Функция 66 - работа с клавиатурой.

  • Подфункция 1 - установить режим ввода с клавиатуры.
  • Подфункция 2 - получить режим ввода с клавиатуры.
  • Подфункция 3 - получить состояние управляющих клавиш.
  • Подфункция 4 - установить общесистемную "горячую клавишу".
  • Подфункция 5 - удалить установленную "горячую клавишу".
  • Подфункция 6 - заблокировать обычный ввод.
  • Подфункция 7 - разблокировать обычный ввод.

Функция 67 - изменить положение/размеры окна.

Функция 68 - внутренние системные службы.

  • Подфункция 0 - получить счётчик переключений задач.
  • Подфункция 1 - переключиться на следующий поток выполнения.
  • Подфункция 2 - кэш + rdpmc.
  • Подфункция 3 - прочитать MSR-регистр.
  • Подфункция 4 - записать в MSR-регистр.
  • Подфункция 11 - инициализировать кучу процесса.
  • Подфункция 12 - выделить блок памяти.
  • Подфункция 13 - освободить блок памяти.
  • Подфункция 14 - ожидать извещения от драйвера.
  • Подфункция 16 - загрузить драйвер.
  • Подфункция 17 - управление драйвером.
  • Подфункция 18 - загрузить DLL с указанием кодировки.
  • Подфункция 19 - загрузить DLL.
  • Подфункция 20 - перераспределить блок памяти.
  • Подфункция 22 - открыть именованую область памяти.
  • Подфункция 23 - закрыть именованую область памяти.
  • Подфункция 24 - установить обработчик исключений
  • Подфункция 25 - изменить состояние активности сигнала
  • Подфункция 26 - освободить страницы памяти
  • Подфункция 27 - загузить файл
  • Подфункция 28 - загрузить файл с указанием кодировки
  • Подфункция 31 - получить данные драйвера

Функция 69 - отладка.

  • Подфункция 0 - определить область данных для отладочных сообщений.
  • Подфункция 1 - получить состояние регистров отлаживаемого потока.
  • Подфункция 2 - установить состояние регистров отлаживаемого потока.
  • Подфункция 3 - отключиться от отлаживаемого процесса.
  • Подфункция 4 - приостановить поток.
  • Подфункция 5 - возобновить выполнение потока.
  • Подфункция 6 - прочитать из памяти отлаживаемого процесса.
  • Подфункция 7 - записать в память отлаживаемого процесса.
  • Подфункция 8 - завершить отлаживаемый поток.
  • Подфункция 9 - установить/снять аппаратную точку останова.

Функция 70 - работа с файловой системой с поддержкой длинных имён.

  • Подфункция 0 - чтение файла с поддержкой длинных имён.
  • Подфункция 1 - чтение папки с поддержкой длинных имён.
  • Подфункция 2 - создание/перезапись файла с поддержкой длинных имён.
  • Подфункция 3 - запись в существующий файл с поддержкой длинных имён.
  • Подфункция 4 - установка размера файла.
  • Подфункция 5 - получение информации о файле/папке.
  • Подфункция 6 - установка атрибутов файла/папки.
  • Подфункция 7 - запуск программы.
  • Подфункция 8 - удаление файла/папки.
  • Подфункция 9 - создание папки.

Функция 71 - параметры окна.

Функция 72 - послать сообщение окну.

Функция 73 - программный блиттер.

Функция 74 - работа с сетевыми устройствами.

  • Подфункция -1 - получить количество активных сетевых устройств.
  • Подфункция 0 - получить тип сетевого устройства.
  • Подфункция 1 - получить имя сетевого устройства.
  • Подфункция 2 - сброс сетевого устройства.
  • Подфункция 3 - остановить сетевое устройство.
  • Подфункция 4 - получить указатель на устройство.
  • Подфункция 6 - получить количество посланых пакетов.
  • Подфункция 7 - получить количество принятых пакетов.
  • Подфункция 8 - получить количество посланых байт.
  • Подфункция 9 - получить количество принятых байт.
  • Подфункция 10 - получить статус соединения.

Функция 75 - работа с сетевым сокетами.

  • Подфункция 0 - Open socket (Открыть сокет).
  • Подфункция 1 - Close socket (Закрыть сокет).
  • Подфункция 2 - Bind (Привязка).
  • Подфункция 3 - Listen (Слушать).
  • Подфункция 4 - Connect (Соединение).
  • Подфункция 5 - Accept (Соглашение).
  • Подфункция 6 - Send (Послать).
  • Подфункция 7 - Receive (Получить).
  • Подфункция 8 - Set socket options (Задать опции сокета)
  • Подфункция 9 - Get socket options (Получить опции сокета)
  • Подфункция 10 - Get socketpair (Получить парный сокет).

Функция 76 - сетевые опции и статистика.

Функция 77 - подсистема POSIX.

  • Подфункция 0 - Создать фьютекс
  • Подфункция 1 - Удалить фьютекс
  • Подфункция 2 - Ожидать
  • Подфункция 3 - Разбудить
  • Подфункция 4 - Зарезервирована
  • Подфункция 5 - Зарезервирована
  • Подфункция 6 - Зарезервирована
  • Подфункция 7 - Зарезервирована
  • Подфункция 8 - open(), пока не реализована
  • Подфункция 9 - close(), пока не реализована
  • Подфункция 10 - read(), чтение из файла в буфер
  • Подфункция 11 - write(), запись данных из буфера в файл
  • Подфункция 12 - dup3(), пока не реализована
  • Подфункция 13 - pipe2(), создание канала

Функция 80 - работа с файловой системой с указанием кодировки.

Функция -1 - завершить выполнение потока/процесса.

Список событий

Очередное событие можно получить вызовом одной из функций 10 (ожидать события), 11 (проверить без ожидания), 23 (ожидать в течение заданного времени). Эти функции возвращают только те события, которые входят в маску, устанавливаемую функцией 40. По умолчанию это первые три, чего вполне достаточно для многих приложений. Коды событий:

  • 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)
  • 2 = нажата клавиша на клавиатуре (поступает, только когда окно активно) или нажата "горячая клавиша";
    • сбрасывается, когда все клавиши из буфера считаны функцией 2
  • 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка закрытия, созданная неявно функцией 0; кнопка минимизации обрабатывается системой и о ней сообщения не приходит;
    • поступает, только когда окно активно;
    • сбрасывается, когда все кнопки из буфера считаны функцией 17)
  • 4 = зарезервировано (в текущей реализации никогда не приходит даже при размаскировке функцией 40)
  • 5 = перерисовывается фон рабочего стола (сбрасывается автоматически после перерисовки, так что если во время перерисовки фона программа не ждёт и не проверяет события, то этого события она не заметит)
  • 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
  • 7 = произошло событие IPC (смотри функцию 60 - Inter Process Communication; сбрасывается при прочтении)
  • 8 = произошло сетевое событие (сбрасывается при прочтении; смотри работу с сетью)
  • 9 = произошло отладочное событие (сбрасывается при прочтении; смотри отладочную подсистему)
  • 16..31 - ранее использовались для проверки соответствующих IRQ (16=IRQ0, 31=IRQ15) (на новых версиях ядра не генерируются)

Коды ошибок файловой системы

  • 0 = успешно
  • 2 = функция не поддерживается для данной файловой системы
  • 3 = неизвестная файловая система
  • 5 = файл не найден
  • 6 = файл закончился
  • 7 = указатель вне памяти приложения
  • 8 = диск заполнен
  • 9 = ошибка файловой системы
  • 10 = доступ запрещён
  • 11 = ошибка устройства
  • 12 = файловой системе недостаточно оперативной памяти

При запуске программы возможны также следующие коды ошибок:

  • 30 = 0x1E = недостаточно памяти
  • 31 = 0x1F = файл не является исполнимым
  • 32 = 0x20 = слишком много процессов